SQL中min函数的使用问题

牛客网SQL题库中的,具体内容如下:

img


针对此题我是这样写的:

img


我的想法是先用group by university进行分组,之后用min(gpa)找出每组的gpa的最小值,可是代码一直报错。后来看了以下解析,说是这种情况要用窗口函数,group by的分组方式不可以。这里我不太理解,为什么min函数不可以,但是
count函数,avg函数就可以利用group by 分组之后求和、求平均。求解答。

1、group by 后的结果select里的字段必须是分组的字段或者聚合类函数
你的device_id字段是有问题的,它不是group by的分组字段,也没有对这个字段进行聚合操作,所以一直会报错

在标准sql语法里面,是不支持select字句里面写非聚合字段的device_id是非聚合字段
聚合字段就是在group by里面的字段,
如果是用于窗口函数点话,只适用于MySQL8.0以及以上大概版本,5.7版本并不支持的

方案来自 梦想橡皮擦 狂飙组基于 GPT 编写的 “程秘”


这是因为不同的聚合函数具有不同的性质,例如,COUNT 函数可以统计分组内的行数,而 AVG 函数可以计算分组内的平均值。然而,MIN 函数的目的是找到分组内的最小值,因此它需要维护全部分组内的信息,这是使用 GROUP BY 分组方式难以实现的。

在这种情况下,您可以使用窗口函数,该函数可以在不分组的情况下计算给定窗口内的某些信息,例如 MIN 值。窗口函数可以在查询中使用 OVER 关键字,指定窗口内的记录范围。

例如,如果您想查询每个大学的 GPA 最低值,您可以使用以下语法:


SELECT university, MIN(gpa) OVER (PARTITION BY university) AS min_gpa
FROM student_table;