第一次练习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

row_number()over(partition by 字段 order by 字段)
不分组对整个结果集排序:
select * ,row_number()over(order by score desc)as '排序1' from score

row_number()over(order by 字段)
2-rank() over()是跳跃排序,有两个第二名时接下来就是第四名(同样是在各个分组内).
结果集分组:
select * ,rank()over(partition by cno order by score desc)from score

rank()over(partition by 字段 order by 字段)
对结果集不分组:
select * ,rank()over(order by score desc)as '排序3' from score

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

dense_rank()over(partition by 字段 order by 字段)
不分组排序:
select * ,dense_rank()over(order by score desc)as '排序5' from score

dense_rank()overorder by 字段)