1. 程式人生 > >mysql 分組排序顯示序列號 row_number()

mysql 分組排序顯示序列號 row_number()

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程式碼層處理 。請參考下面文章: