我有下表:
我想知道哪个学生在哪个时期的总分最高。
当我执行此查询时:
SELECT
MAX(SUM(point)) score,
student,
`period`
FROM table1
GROUP BY student, `period`
它给出以下错误:
#1111 - Invalid use of group function
当我执行此查询时:
SELECT
`period`,
student,
MAX(p) score
FROM
(
SELECT
SUM(point) p,
student,
`period`
FROM table1
GROUP BY student, `period`
) t1
GROUP BY `period`
它给出了以下结果:
课时和最高分都很好,但我总是有第一个学生 ID。
预期输出:
除此之外。如果有多个学生得分最高,我想知道他们所有人。
最佳答案
您可以使用最大窗口函数,如下所示:
WITH sum_pt AS
(
SELECT student, period,
SUM(point) AS st_period_pt
FROM table1
GROUP BY student, period
),
max_sum as
(
SELECT *,
MAX(st_period_pt) OVER (PARTITION BY period) AS max_pt_sum
FROM sum_pt
)
SELECT student, period, st_period_pt
FROM max_sum
WHERE st_period_pt = max_pt_sum
ORDER BY period
参见demo .
关于sql - SQL 中具有多个 group by 子句的 SUM 和 MAX 函数会导致问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74862247/