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代码层处理 。请参考下面文章:

(小工具)Java分组排序通用程序实践(终结篇)

你可能感兴趣的:(Mysql,Java开发)