查詢平均分最高的系(sdept),若有並列顯示所有。
WITH dept_avg AS (
SELECT
s.sdept,
AVG(sc.grade) AS avg_grade
FROM stu s
JOIN sc ON sc.sno = s.sno
GROUP BY s.sdept
),
ranked AS (
SELECT
sdept,
avg_grade,
DENSE_RANK() OVER (ORDER BY avg_grade DESC) AS rnk
FROM dept_avg
)
SELECT sdept, avg_grade
FROM ranked
WHERE rnk = 1;
SELECT d.sdept, d.avg_grade
FROM (
SELECT s.sdept, AVG(sc.grade) AS avg_grade
FROM stu s JOIN sc ON sc.sno = s.sno
GROUP BY s.sdept
) d
JOIN (
SELECT MAX(avg_grade) AS max_avg
FROM (
SELECT AVG(sc.grade) AS avg_grade
FROM stu s JOIN sc ON sc.sno = s.sno
GROUP BY s.sdept
) t
) m ON d.avg_grade = m.max_avg;
窗口函數讓「分組內排序取 Top-N」變得直觀高效,是現代 SQL 開發必備技能。