Oracle SQL

  • order by
    排序, desc降序,asc升序

  • 日期
日期可以直接+1

  • rank,dense_rank,row_number
名称 区别
rank 排序的方式是前边有多少人就是多少名,按照实体排名
dense_rank 稠密的排序方式,只考虑去重后的成绩排名
row_number 就是行号,可以用于分页

  • group by 与partition by
名称 区别
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)

  • over 窗口函数
名称 区别
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

你可能感兴趣的:(Oracle SQL)