- order by
排序, desc
降序,asc
升序
日期可以直接+1
- rank,dense_rank,row_number
名称 |
区别 |
rank |
排序的方式是前边有多少人就是多少名,按照实体排名 |
dense_rank |
稠密的排序方式,只考虑去重后的成绩排名 |
row_number |
就是行号,可以用于分页 |
名称 |
区别 |
group by |
分组后的数据只能计算出组内一个统计数据,而不能保存组内的每一条数据,比如计算平均值,总值,最大值,最小值 |
partition by |
之后的数据依旧保存着每一条数据。他的分组效果类似于将分组后的数据排列在一起 |
- 去除重复
按照重复列分组,取出每一个分组的一个唯一标识,然后删除所有不在这个列表里的行数据。
drop table where id not in
(select min(id) group by (repeat) from table)
//
(select first_value(id) group by (repeat) from table)
名称 |
区别 |
lag |
lag(列名,n,default),前n个,over内必须有排序 |
lead |
lead(列名,n,default),后n个, over内必须有排序 |
FIRST_VALUE |
可以是分组排序后的第一个值。 |
LAST_VALUE |
可以是分组排序后的最后一个值。 |
NULLS FIRST |
null 放在第一个 |
NULLS LAST |
放最后一个 |
NTILE(n) |
将数据分成n份 |
//通过部门分组,通过salary排序,然后得到组内行号,重命名为rown
row_number() over(PARTITION BY e.department_id ORDER BY e.salary) rown
//排名
rank() over(PARTITION BY e.department_id ORDER BY e.salary) rown
//lag 升序排序后,比当前温度低的一个,温度对应的日期。
lag(date,1,null) over (order by temperature asc) as beforeDate
// 将null放在最后一个
RANK() OVER(PARTITION BY E.DEPTNO ORDER BY E.SAL NULLS LAST)
//按分位数,最后通过分位数的字段名,筛选到自己想要的数据
//若只取前三分之一,all_cmp=1即可,若只取中间三分之一,all_cmp=2即可
NTILE(3) OVER(ORDER BY E.SAL DESC NULLS LAST) ALL_CMP