簡體   English   中英

帶有最高值的 SQL 查詢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM