MySQL 查詢各科前三的數據


 

 

 

 方法一:

SELECT sc.*,c.`
Cname` ,COUNT(sc.C)
FROM sc
LEFT JOIN sc a
ON sc.C = a.C AND sc.score >= a.score
LEFT JOIN course c
ON sc.C = c.C
WHERE sc.C = c.C
GROUP BY
sc.C,sc.S,sc.score
HAVING COUNT(sc.C)>=4
ORDER BY a.C,a.score DESC

解析:

先copy 一個sc 表中的數據,與原sc 進行對比。統計每個score 大於其他數據的計數。再按sc.C,sc.S進行分組

SELECT sc.* ,COUNT(sc.C) 
FROM sc  
LEFT JOIN sc a
ON sc.C = a.C AND sc.score >= a.score
GROUP BY sc.C,sc.S

 

 可以看到,第一行數據的count計數為 6,由於我們要取每科前三名,sc表中共有student S編號7個,

自身不納入count進行計數,則為6個需要取出前3--計數大於3的值

SELECT sc.* ,COUNT(sc.C) 
FROM sc  
LEFT JOIN sc a
ON sc.C = a.C AND sc.score >= a.score
GROUP BY
sc.C,sc.S,sc.score
HAVING COUNT(sc.C)>3
ORDER BY a.C,a.score DESC

方法二:

SELECT a.* FROM
sc a
WHERE
(SELECT COUNT(*)
FROM sc
WHERE sc.C =a.C
AND a.score<sc.score) <3
ORDER BY a.C,a.score DESC

解析:

與方法一同理,復制一個表進行count計數


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM