sql - SQL 中具有多个 group by 子句的 SUM 和 MAX 函数会导致问题

标签 sql select mariadb subquery max

我有下表:

<表类=“s-表”> <标题> id 学生 期间 点 <正文> 1 1 第一季度 0 2 2 第一季度 2 3 2 第二季度 5 4 2 第三季度 0 5 3 第一季度 7 6 3 第一季度 8 7 3 第二季度 3 8 3 第二季度 1 9 3 第三季度 0 10 3 第三季度 0 11 4 第一季度 1 12 4 第三季度 9

我想知道哪个学生在哪个时期的总分最高。


当我执行此查询时:

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`

它给出了以下结果:

<表类=“s-表”> <标题> 期间 学生 得分 <正文> 第一季度 1 15 第二季度 1 5 第三季度 1 9

课时和最高分都很好,但我总是有第一个学生 ID。


预期输出:

<表类=“s-表”> <标题> 期间 学生 得分 <正文> 第一季度 3 15 第二季度 2 5 第三季度 4 9

除此之外。如果有多个学生得分最高,我想知道他们所有人。

最佳答案

您可以使用最大窗口函数,如下所示:

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/

相关文章:

sql - 在查询sql postgresql中替换A-Z和0-9

mysql - 如何结合多个 COUNT() 和 GROUP BY 实现 MySQL Query

javascript - 如何从 javascript 的下拉列表中删除选项?

mysql - 将 SQL Server 存储过程重写为 MySQL(MariaDB)

spring-boot - 通过 docker 容器拒绝访问本地数据库

mysql查询插入日期列小于10时的选择限制

sql - 按整数数组中的索引查询表

sql - 简单的SQL问题

sql - 使用 Hibernate 进行不区分大小写的搜索

mysql - MariaDB 上的查询非常非常慢