sql - SQL MAX() 分组
问题描述
表:
student(sid, sname, sex, age, year, gpa)
major(dname, sid)
问题:对于每个系有超过 15 名学生的系,我们要打印有关系内 GPA 最高的学生的信息。特别是,对于每个这样的学生,我们要打印学生 ID、学生姓名和 GPA,以及该学生主修的部门名称。
到目前为止,我有:
SELECT student.sid, student.sname, student.gpa, major.dname
FROM student
RIGHT JOIN major ON student.sid = major.sid
WHERE student.gpa IN (
SELECT MAX(gpa)
FROM student JOIN major ON student.sid = major.sid
GROUP BY dname
HAVING COUNT(dname) > 15
)
但它并没有给我准确的查询。student.gpa
IN 中的子句有效,但以这种方式放在一起时,它实际上与dname
最大 GPA不匹配。我在这里做错了什么?
此查询给出:
我需要:
解决方案
如果将WHERE ... IN
语句更改为INNER JOIN
,则可以连接更多字段。
SELECT student.sid, student.sname, student.gpa, major.dname
FROM student
RIGHT JOIN major
ON student.sid = major.sid
INNER JOIN (
SELECT MAX(gpa) as max_gpa, dname
FROM student JOIN major ON student.sid=major.sid
GROUP BY dname
HAVING COUNT(dname)>15
) as dept_gpa
ON student.gpa = dept_gpa.max_gpa
AND major.dname = dept_gpa.dname
推荐阅读
- css - 网格项目跨度不会超过 1 列
- apache-kafka - 在 Kafka DR 场景中使用 Observer Zookeeper
- python - 在 Python 中按多个间隔平均列值
- c# - 我无法在 XAML 和代码后面访问 ListView 中的 x:控件名称
- php - PHP:如何通过另一个变量设置一个变量的值?
- php - SQL LOAD FILE 用零/空值填充表
- c# - Unity - 如何在屏幕覆盖画布上方显示世界空间画布?
- actionscript-3 - 如何设置 x 和 y 可以移动多少movieclip 的最大/限制?
- python - 如何在时间序列数据中标注类别?
- javascript - 只要输入标签中有空格,就禁用提交按钮