关系型数据库数据分组排名实现的示例分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
1.数据源
2.数据整体排名
1)普通排名
从一开始,按照顺序一次往下排(相同的值也是不同的排名)。
set @ rank=0;
挑选
城市,
得分,
@rank:=@rank 1rank
fromcs
orderbyscoredesc结果如下:
2)并列排名
相同的值是相同的排名(但是不留空位)。
设置@rank=0,@ price=null
选择。*,
casewhen @ price=scorethen @ rank
当@ price:=scorethen那么@rank:=@rank 1endrank
fromcsorderbyscoredesc
-当查询的得分值=@价格时,输出@rank,
-当不等时,将得分值赋给@价格,并输出@rank:=@rank 1
-或者
设置@rank=0,@ price=null
挑选
城市、分数、排名
从
(选择项。*,
@rank:=if(@p=score,@rank,@rank 1)rank,
@ p:=分数
fromcs
order by core desc)a;结果如下:
3)并列排名
相同的值是相同的排名(但是留空位)。
set@rank=0,@price=null,@ z=1;
挑选
城市、分数、排名
从
(选择
cs .*,
@rank:=if(@p=score,@rank,@z)rank,
@ p:=分数,@z:=@z 1
fromcs
order by core desc)a;结果如下:
3.数据分组后组内排名
1)分组普通排名
从一开始,按照顺序一次往下排(相同的值也是不同的排名)。
set@rank=0,@ c=null
挑选
cs.city,cs.score,
@rank:=if(@c=city,@rank 1,1)rank,
@ c:=城市
fromcs
orderbycs.city,cs.score结果如下:
2)分组后并列排名
组内相同数值排名相同,不占空位。
set@rank=0,@c=null,@ s=null
挑选
cs.city,cs.score,
@rank:=if(@c=city,if(@s=score,@rank,@rank 1),1)rank,
@ c:=城市,
@ s:=分数
fromcs
orderbycs.city,cs.score结果如下:
3)分组后并列排名
组内相同数值排名相同,需要占空位。
set@rank=0,@c=null,@ s=null
挑选
cs.city,cs.score,
@rank:=if(@c=city,if(@s=score,@rank,@rank 1),1)rank,
@ c:=城市,
@ s:=分数
fromcs
orderbycs.city,cs.score结果如下:
4.分组后取各组的前两名
方法一:按照分组排名的三种方式,然后限定排名的值
set@rank=0,@z=0,@c=null,@ s=null
selecta.city,a.score,a.rankfrom
(选择
cs.citycity,cs.scorescore,
@z:=if(@c=city,@z 1,1),
@rank:=if(@c=city,if(@s=score,@rank,@z),1)rank,
@ c:=城市,
@ s:=分数
fromcs
orderbycs.city,cs.scoredesc)a
哪里?秩=2;结果如下:
内部查询
从乡村基中选择*
哪里(
从列表中选择计数(*)项
其中c . city=cs。城市和c . scorcs。分数)2
按城市排序,分数描述结果如下:
上述代码的执行原理如下图:
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/60903.html