一些SQL
SQL复习
一、窗口函数
窗口函数也称为OLAP(Online Anallytical Processing)函数,意思是对数据库数据进行实时分析处理。
窗口函数就是为了实现OLAP而添加的标准SQL功能。
窗口函数基本语法:
1 | <窗口函数> over (partition by <用于分组的列名> |
1.分类:
序号函数:row_number() / rank() / dense_rank()
- ROW_NUMBER()不考虑并列,1、2、3、4
- RANK()考虑并列,并列之后和ROW_NUMBER一样,1、2、2、4
- DENSE_RANK()考虑并列,并列之后按下一个名次来,1、2、2、3
分布函数:percent_rank() / cume_dist()
- percent_rank() :rank()/rows
- cume_dist():累积分布,表示值小于或等于行的值除以总行数的行数
前后函数:lag(n) 前/ lead(n)后
1
2
3select *,
lead(某个指标,offset,default_value) over(partition by 某个属性 order by 某个属性 desc) as lead_val
from 表offset默认为1,default_value不设置就是NULL
头尾函数:first_val(expr) / last_val(expr),得到分区中的第一个/最后一个(截至当前条记录)指定参数的值。
其他函数:nth_value(expr, n),返回窗口中第N个expr的值
原有的聚合函数:sum(),avg(),count(),max(),min()
2.应用:
topN
1
2
3
4
5select *
from(select *,
row_number() over(partition by 某个属性 order by 排序属性 desc)as ranking
from 表) as a
where ranking <=n累计求和
1
2
3select *,
sum(某个指标) over(oder by 某个属性) as current_sum
from 表滑动平均
1
2
3select *,
avg(某个指标) over(order by 某个属性 rows 2 preceding) as current_avg
from 表;使用 rows 和 preceding 这两个关键字,是“之前~行”的意思。得到的结果是自身纪录及前2行的平均。
参考:
二、日期处理
三、行和列的转换
四、题目
union去重
union all不去重
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 杀杀人上上网!
评论