想象我们有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
答案 0 :(得分:1)
您可以对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 |
答案 1 :(得分:0)
将marks
的累积总和保留到一个变量中。并将其用作子查询,并选择total
为100的行。但是,如果没有任何行的累积总数为100,则不会得到任何结果。
查询
set @total := 0;
select `id`, `name`, `marks`, `grade` from(
select `id`, `name`, `marks`, `grade`, (@total := @total + `marks`) as `total`
from `your_table_name`
order by `grade`
) as `t`
where `t`.`total` = 100;
答案 2 :(得分:0)
正如上面提到的数据库结构,下面是获取输出的一种方法
从(选择*从(选择ID,名称,等级,标记,@total:= @total +标记+选择AS总计FROM(螺柱,(select @total:= 0)t)按等级排序)中选择名称)t在哪里总数<= 100)(按降级限制1的final_view顺序