mysql - 在一个语句中合并两个 sql 查询

标签 mysql sql subquery

我有一个学生成绩列表,我想根据每个学生的平均分找到他的排名

这是表格 enter image description here

查找学生排名的步骤。

  1. 创建每个学生的平均分数 View

      CREATE VIEW mid_view as 
      SELECT *,AVG(score) as score from midterm_result group by student_id
    

enter image description here

2..找到排名

     SELECT * , @rank := if( @last = average, @rank , @seq ) AS rank, @seq := @seq +1,   
     @last := average
    FROM mid_view
    ORDER BY average DESC

结果是 enter image description here

我的目标是减少步骤,我想在不创建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/

相关文章:

mysql - 按子键分组,但如果不是 1 则显示 0 的新读取

mysql - 在插入时启动触发器和例程

mysql - 从行到最后一行选择

mysql - 将 WHERE 子句中的 SUBQUERY 更改为 NORMAL JOIN

c# - LINQ 以及如何返回特定类型的列表

php - SQL Order By - 最后显示某些记录

sql - 选择具有多行的 1 行?

sql - Postgres Group 通过忽略空值

java - 每个网页 View 的数据库条目(分析)

mysql - 如何在MySQL的WHERE子句中使用子查询表别名