SQL排序
说起SQL排序,大家首先想到的是rank()、dense_rank()、row_number(),而常用这3个函数的同学想必也非常清楚这三者间的区别:
- rank():用于当存在相同位次的记录时,跳过之后的位次,如1,2,2,4,5…;
- dense_rank():用于存在相同位次记录时不跳过之后的位次,如1,2,2,3,4…;
- row_number():按照排序依次往下,如1,2,3,4,5…。
那么问题来了,如果缺少了这几种函数的支持,我们如何利用标准的SQL来实现同样的目的呢?答案就是非等值自连接。这里小编想提醒一下秋招以数据研发或数据分析为求职意向的同学一定要重点关注一下,很多大厂在面试时都会出这类似的问题,虽然会做不一定能通过最终面试,但不会做肯定不通过!遥想当年小编在面某大厂时,就挂在了这道题上…
案例
以三年二班各学生的成绩表grades为例,按照从高到底为每个学生的成绩进行排序:
name | grade |
---|---|
张三 | 90 |
李四 | 95 |
王五 | 96 |
小红 | 95 |
小绿 | 90 |
小蓝 | 100 |
小方 | 87 |
… | … |