【问题标题】:List correctly the position of student marks in database正确列出学生成绩在数据库中的位置
【发布时间】:2017-04-18 21:59:24
【问题描述】:

我有一个查询可以根据学生的平均成绩定位学生,这个 mysql 查询在查询整个班级的职位时效果很好。但是,例如,当我想要一个特定学生的职位时,即使在列表中的学生不在该职位上,查询也会将该学生的职位排在第一位。

下面是查询,查询整个班级时。在这里效果很好。

    SELECT (@rownum := @rownum + 1) AS rank, student_id, 
   student_name,term_1_avg
   FROM `students` a CROSS JOIN
   (SELECT @rownum := 0) params
   WHERE class = 2 
   ORDER BY term_1_avg DESC

但是当查询是这样的时候

    SELECT (@rownum := @rownum + 1) AS rank, student_id, 
     student_name,term_1_avg
   FROM `students` a CROSS JOIN
   (SELECT @rownum := 0) params
   WHERE class = 2 and student_id=2013494
   ORDER BY term_1_avg DESC

即使该学生不是第一名,它也会将学生排名第一。

如何更改查询,以便在查询学生时显示他/她在全班的位置。

【问题讨论】:

    标签: php mysql sql database rank


    【解决方案1】:

    您的排名是由查询完成的,因此您应该保持查询不变并将其用作子查询

    SELECT * FROM
    (SELECT
        (@rownum := @rownum + 1) AS rank, 
        student_id, 
        student_name,
        term_1_avg
    FROM `students` a 
    CROSS JOIN (SELECT @rownum := 0) params
    WHERE class = 2 
    ORDER BY term_1_avg DESC) as sub
    WHERE sub.student_id=2013494
    

    【讨论】:

      【解决方案2】:

      也许是这样的:

      Select *
      from (SELECT (@rownum := @rownum + 1) AS rank, student_id, 
            student_name,term_1_avg
            FROM `students` a CROSS JOIN
            (SELECT @rownum := 0) params
            WHERE class = 2 
            ORDER BY term_1_avg DESC)
      where student_id=2013494
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-02-27
        • 1970-01-01
        • 2022-08-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多