经典SQL练习45题||总结二dense_rank()over、rank()over()、row_number()over()

第一次练习SQL经典45题是18年冬天,做的时候很痛苦基本上半个小时刷一道题,一年过去了。在次刷这套题主要有2个目的:
一是重新培养学习的习惯,学习标准2.5小时
二是学习别人的思路并掌握三类SQL函数。排序row_number()over()、分组函数group by 、时间函数

一 .排序函数

1-row_number()over()对结果集进行分组排序

partition by 用于给结果集分组,如果没有指定那么它把整个结果集作为一个分组,它和聚合函数不同的地方在于它能够返回一个分组中的多条记录,而聚合函数一般只有一个反映统计值的记录。

分组排序:

select * ,row_number()over(partition by cno order by score desc)as '排序' from score 
经典SQL练习45题||总结二dense_rank()over、rank()over()、row_number()over()_第1张图片
row_number()over(partition by 字段 order by 字段)
不分组对整个结果集排序:

select * ,row_number()over(order by score desc)as '排序1' from score 
经典SQL练习45题||总结二dense_rank()over、rank()over()、row_number()over()_第2张图片
row_number()over(order by 字段)
2-rank() over()是跳跃排序,有两个第二名时接下来就是第四名(同样是在各个分组内).
结果集分组:

select * ,rank()over(partition by cno order by score desc)from score 
经典SQL练习45题||总结二dense_rank()over、rank()over()、row_number()over()_第3张图片
rank()over(partition by 字段 order by 字段)
对结果集不分组:

select * ,rank()over(order by score desc)as '排序3' from score 
经典SQL练习45题||总结二dense_rank()over、rank()over()、row_number()over()_第4张图片
rank()over(order by 字段)
3-dense_rank() over()是连续排序,有两个第二名时仍然跟着第三名。相比之下row_number是没有重复值的 .
分组排序:

select * ,dense_rank()over(partition by cno order by score desc) as '排序4'from score 
经典SQL练习45题||总结二dense_rank()over、rank()over()、row_number()over()_第5张图片
dense_rank()over(partition by 字段 order by 字段)
不分组排序:

select * ,dense_rank()over(order by score desc)as '排序5' from score 
经典SQL练习45题||总结二dense_rank()over、rank()over()、row_number()over()_第6张图片
dense_rank()overorder by 字段)

你可能感兴趣的:(经典SQL练习45题||总结二dense_rank()over、rank()over()、row_number()over())