sql - 查找参加 SQL 课程最多的学生
问题描述
假设有一个学生表,其中包含学生 ID、学期 ID 和每学期修读的课程数量:
student semester num_courses
10001 23 3
10002 23 5
10003 23 1
10004 25 2
10005 25 3
10003 25 5
10000 26 4
10013 26 2
...
我怎样才能找到每学期参加最多课程的学生?
预期输出为:
student semester num_courses
10002 23 5
10003 25 5
10000 26 4
...
我想过使用OVER PARTITION BY
,但我不确定如何正确使用这种类型的查询。我得到的没有按预期工作。
SELECT s.student, s.semester, MAX(s.num_courses) OVER (PARTITION BY s.semester) AS max
FROM students s;
解决方案
你的想法很好。现在您有了学生的学期课程数和最大学期课程数,比较两者:
SELECT semester, num_courses, student
FROM
(
SELECT
student,
semester,
num_courses,
MAX(num_courses) OVER (PARTITION BY semester) AS semester_max_num_courses
FROM students s
) with_max
WHERE num_courses = semester_max_num_courses
ORDER BY semester, student;
另一种方法是选择所有最大学期课程数,然后使用它来获取学生:
SELECT semester, num_courses, student
FROM students
WHERE (semester, num_courses) IN
(
SELECT semester, MAX(num_courses)
from students
GROUP BY semester
)
ORDER BY semester, student;
推荐阅读
- c# - 数据天数中的多个时间范围组
- python - Python 上的彩虹数组
- jquery - Fullcalendar 动态营业时间 onselect AJAX
- c# - 如何在 WPF 中动态更改滚动条背景图像?
- ios - 允许访问位置后缩放到用户位置不缩放初始加载
- express - 如何在 gcloud 上但不在域的根目录上启动 express 服务器?
- python - 每次在`tkinter`中按下按钮时,如何获得不同的标签值?
- azure - 高级应用程序重启 - powershell (Azure CLI)
- php - 苗条的路由和控制器(这个 __call 函数如何从路由调用以及为什么 $this->request 使用 $request= 的 insted)
- swift - 数据未能从 firebase [swift] 返回