mysql - 如何返回最后一行的具体总和?

标签 mysql sum

假设我们有 1 行学生,其中包含 id、姓名、分数和排名。编写查询,返回学生的姓氏,其中分数等于 100,按年级排序。 示例

<小时/>
 - id | name | marks | grade |
 - 01 | Jeff | 40    | 1 |
 - 02 | Annie| 40    | 3 |
 - 03 | Ramy | 20    | 5 |
 - 04 | Jenny| 20    | 2 |

所以结果应该返回

Annie

因为 Annie 是分数总和的最后一行,分数等于 100。Jeff 是第一个,因为根据成绩他等于 1,所以他应该排在第一位,第二位是 Jenny,第三位是 Annie。杰夫(40)+珍妮(20)+安妮(40) = 100

最佳答案

您可以为 MySQL 的用户变量创建一个运行总和。
此查询应在 MySQL 5.1 及更高版本上运行。

查询

SELECT 
 Table1_alias.name
FROM (

  SELECT 
      Table1.name
   , (@running_marks_sum := @running_marks_sum + Table1.marks) AS running_marks_sum
  FROM 
   Table1
  CROSS JOIN (SELECT @running_marks_sum := 0) AS init_user_param
  ORDER BY 
    Table1.grade ASC  
) AS Table1_alias
WHERE 
 Table1_alias.running_marks_sum = 100

结果

| name  |
| ----- |
| Annie |

View on DB Fiddle

仅限 MySQL 8.0+

查询

SELECT 
 Table1_alias.name
FROM (

  SELECT 
     Table1.name
   , SUM(Table1.marks) OVER(ORDER BY Table1.grade) AS running_marks_sum
  FROM 
    Table1

) AS Table1_alias 
WHERE 
  Table1_alias.running_marks_sum = 100;

结果

| name  |
| ----- |
| Annie |

View on DB Fiddle

关于mysql - 如何返回最后一行的具体总和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52664695/

相关文章:

php - 简单的ajax表单提交报错

php - 如何获取Excel中每一列的值并插入到MySQL中

php - SELECT DISTINCT 或 array_unique 不适用于我的数据

python - 如何在pandas数据框中按特定条件进行分组

mysql - SQL SUM 前 5 个值然后 JOIN 结果

php - mysql检查其他日期范围中的日期范围

html - 如何防止在html表单文本区域中附加回车符?

sql - 事务处理 SQL : Display two SUM() from differents tables?

R - 不同长度数据帧的多个标准总和

MySQL SUM基于没有子查询的外键的不同行