假设我们有 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 |
仅限 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 |
关于mysql - 如何返回最后一行的具体总和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52664695/