[英]SQL query with Highest value with tie
我正在嘗試編寫一個查詢,列出在每個部門獲得最高總學分的學生。 我還必須在結果中包括並列學生。 查詢應返回與部門名稱、學生姓名和他們獲得的總學分的關系。
SELECT s.dept_name, s.name, s.max
FROM (SELECT dept_name, name, MAX(tot_cred) as max
FROM university.student GROUP BY dept_name) as s,
university.student as t
WHERE s.name = t.name;
它給出了錯誤,我不知道如何處理關系。 如果我刪除查詢中的姓名部分,我已經設法獲得了每個部門的最高學分(沒有並列)
表 student 由 ID、姓名、部門、總學分組成。
使用RANK()
窗口函數:
SELECT t.dept_name, t.name, t.tot_cred
FROM (
SELECT dept_name, name, tot_cred,
RANK() OVER(PARTITION BY dept_name ORDER BY tot_cred DESC) rn
FROM university.student
) t
WHERE t.rn = 1
如果您不能使用窗口函數,這是一種替代方法:
SELECT s.dept_name, s.name, s.tot_cred
FROM university.student s
INNER JOIN (
SELECT dept_name, MAX(tot_cred) tot_cred
FROM university.student
GROUP BY dept_name
) t ON t.dept_name = s.dept_name AND s.tot_cred = t.tot_cred
或NOT EXISTS
:
SELECT s.dept_name, s.name, s.tot_cred
FROM university.student s
WHERE NOT EXISTS (
SELECT 1 FROM university.student
WHERE dept_name = s.dept_name AND tot_cred > s.tot_cred
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.