赞
踩
dense_rank/rank()-over()用于对数据进行统计排名。
rank-over()函数对相同的统计值的排名相同,不同的统计值之间的排名不连续(相同统计值的排名均为其前面不同统计值的数量+1)。
dense_rank-over()函数对相同的统计值的排名相同,不同的统计值之间的排名连续。
注意:如果over()中使用order by 进行排序后没有重复的值则dense_rank/rank()-over()统计排名结果一致且排名均连续。
dense_rank/rank()-over()可以在over()中使用Partition By指定进行排名的数据范围进行分组统计排名。
注意:这里的partition by进行排名的数据范围,而不是SQL语句里的分组函数。
Update test_lagover Set dvalue = dvalue + 1 Where ymdate >= 202201;
对dvalue值进行追加。Select rank() over(Order By Sum(dvalue) Desc, ymdate) rankid, ymdate, Sum(dvalue) dvalue From test_lagover Group By ymdate # 结果 1 1 203001 310 2 2 203002 310 3 3 203003 310 4 4 203004 310 5 5 203005 310 6 6 203006 310 7 7 203007 310 8 8 203008 310 9 9 203009 310 10 10 203010 310 11 11 203011 310 12 12 203012 310 13 13 202801 290 14 14 202802 290 15 15 202803 290
按每个ymdate的dvalue统计值倒序进行非连续性排名
Select rank() over(Order By Sum(dvalue) Desc, ymdate) rankid, ymdate, Sum(dvalue) dvalue From test_lagover Group By ymdate # 结果 1 1 203001 310 2 1 203004 310 3 1 203002 310 4 1 203012 310 5 1 203011 310 6 1 203007 310 7 1 203010 310 8 1 203008 310 9 1 203003 310 10 1 203005 310 11 1 203006 310 12 1 203009 310 13 13 202909 290 14 13 202902 290 15 13 202801 290
Select dense_rank() over(Order By Sum(dvalue) Desc, ymdate) rankid, ymdate, Sum(dvalue) dvalue From test_lagover Group By ymdate # 结果 1 1 203001 310 2 2 203002 310 3 3 203003 310 4 4 203004 310 5 5 203005 310 6 6 203006 310 7 7 203007 310 8 8 203008 310 9 9 203009 310 10 10 203010 310 11 11 203011 310 12 12 203012 310 13 13 202801 290 14 14 202802 290 15 15 202803 290
按每个ymdate的dvalue统计值倒序进行连续性排名
Select dense_rank() over(Order By Sum(dvalue) Desc, ymdate) rankid, ymdate, Sum(dvalue) dvalue From test_lagover Group By ymdate # 结果 1 1 203001 310 2 1 203004 310 3 1 203002 310 4 1 203012 310 5 1 203011 310 6 1 203007 310 7 1 203010 310 8 1 203008 310 9 1 203003 310 10 1 203005 310 11 1 203006 310 12 1 203009 310 13 2 202909 290 14 2 202902 290 15 2 202801 290
Select rank() over(Partition By trunc(ymdate / 100) Order By Sum(dvalue) Desc) rankid, ymdate, Sum(dvalue) dvalue From test_lagover Group By ymdate # 结果 1 1 202102 210 2 1 202106 210 3 1 202109 210 4 1 202105 210 5 1 202107 210 6 1 202108 210 7 1 202111 210 8 1 202101 210 9 1 202112 210 10 1 202103 210 11 1 202104 210 12 1 202110 210 13 1 202212 230 14 1 202201 230 15 1 202206 230
Select dense_rank() over(Partition By trunc(ymdate / 100) Order By Sum(dvalue) Desc) rankid, ymdate, Sum(dvalue) dvalue From test_lagover Group By ymdate # 结果 1 1 202102 210 2 1 202106 210 3 1 202109 210 4 1 202105 210 5 1 202107 210 6 1 202108 210 7 1 202111 210 8 1 202101 210 9 1 202112 210 10 1 202103 210 11 1 202104 210 12 1 202110 210 13 1 202212 230 14 1 202201 230 15 1 202206 230
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。