https://blog.csdn.net/yhyr_ycy/article/details/90342744
mysql实现的排名,前TopN记录,分组排名,分组TopN记录
前TopN记录
1.自身LEFT JOIN,t1.某字段<=t2.某字段 ,having count(记录)<=n 作为TopN记录.
分组排名:例子
SELECT DISTINCT
salary,
deparment
FROM
(
SELECT
deparment,
salary,
@rank :=
IF (
@dep = deparment,
IF (
@sal = salary,
@rank :=@rank,
@rank :=@rank + 1
),
1
) AS rank,
@sal := salary,
@dep := deparment
FROM
employee a,
(
SELECT
@rank := 0,
@sal := NULL,
@dep := NULL
) b
ORDER BY
deparment,
salary DESC
) c
WHERE
rank <= 3;
基于本地变量实现排名的前提是要保证数据的有序性(降序)。而分组做Top-N筛选则首先需要保证各分组的有序性(降序),然后每对一个分组进行排名;在每完成一个分组的排名并开始一下分组排名时,需要将rank置为1,只有这样才能保证下一个分组排名结果的正确性;所以这里采用了嵌套IF的方式,其中外层用于判断是否更换分组,而内层用于进行非跳跃式同分同名排名。也正因为同分同名的缘故,所以最后筛选时需要对薪水进行Distinct,保证结果的唯一性
————————————————
版权声明:本文为CSDN博主「逸辰杳」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yhyr_ycy/article/details/90342744