我有一个学生成绩列表,我想根据每个学生的平均分找到他的排名
这是表格
查找学生排名的步骤。
创建每个学生的平均分数 View
CREATE VIEW mid_view as SELECT *,AVG(score) as score from midterm_result group by student_id
2..找到排名
SELECT * , @rank := if( @last = average, @rank , @seq ) AS rank, @seq := @seq +1,
@last := average
FROM mid_view
ORDER BY average DESC
结果是
我的目标是减少步骤,我想在不创建mid_view
的情况下达到最终结果我如何将这些组合到单个语句中的查询?
最佳答案
您可以只包含第一个查询作为第二个查询的子查询:
SELECT m.*, @rank := if(@last = average, @rank, @seq) AS rank,
@seq := @seq +1, @last := average
FROM
(
SELECT *, AVG(score) as score
from midterm_result
group by student_id
) m
ORDER BY average DESC
关于mysql - 在一个语句中合并两个 sql 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25411139/