mysql 分組排序顯示序列號 row_number()
阿新 • • 發佈:2018-12-24
mysql 分組排序顯示序列號
mysql沒有row_number()函式,如何實現分組排序顯示序列號
需求:要求分組統計後得出排名。如圖1,根據組織分組後按績效得分排名得圖2效果。
表名:pef_score
(圖1)
組織 | 供應商 | 績效得分 |
---|---|---|
順德工廠 | 智慧家居 | 80 |
順德工廠 | 啟明公司 | 90 |
廣州工廠 | 創世公司 | 85 |
廣州工廠 | 中山公司 | 90 |
廣州工廠 | 合信公司 | 100 |
(圖2)
組織 | 供應商 | 績效得分 | 排名 |
---|---|---|---|
順德工廠 | 智慧家居 | 80 | 1 |
順德工廠 | 啟明公司 | 90 | 2 |
廣州工廠 | 創世公司 | 85 | 1 |
廣州工廠 | 中山公司 | 90 | 2 |
廣州工廠 | 合信公司 | 100 | 3 |
分析:一般用group by只能分組,mysql中沒有rownum函式。所以只有3種思路實現:
1)用儲存過程 (專案組要求儘量不用儲存過程)
2)mysql關聯查詢技巧
3)在java程式碼層處理
這裡採用思路2)快速簡單實現功能。
SQL程式碼如下:
SELECT a.組織,a.供應商,a.績效得分,count(*) AS 排名
FROM pef_score as a
LEFT JOIN pef_score as b
on a.組織 = b.組織
and a.績效得分>= b.績效得分
GROUP BY a.組織, a.績效得分;
注:上述SQL的中文對應實際英文欄位名稱即可。
補充說明:
其實這種sql的處理有個漏洞,就是第1,2名的分數相同時候,該sql的結果是第一名的名次是從2開始。對於提及的3)在Java程式碼層處理 。請參考下面文章: