SQL 进阶: 窗口函数、行转列

1. SQL 语句的执行顺序

from ——> join——> on——> where ——> group by——>  avg, sum.... ——>  having  ——> select  ——> distinct  ——> order by ——> offset

 

2. 窗口函数

2.1 窗口函数说明

窗口函数,也可以被称为OLAP函数或分析函数,对数据库数据进行实时分析处理。窗口函数可以进行排序,生成序列号等一般的聚合函数无法实现的高级操作。窗口函数和聚合函数的不同之处是:对于每个组返回多行,而聚合函数对于每个组只返回一行。

1 - Rank Function  (平常用的最多的一类)  参考:这里

  • Rank() Over()
  • Row_Number() Over()
  • Dense_Rank() Over()
  • NTILE(N) Over()

2 - Aggregate Function

  • Sum() Over()
  • Count() Over()
  • AVG() Over()
  • MIN() Over()
  • MAX() Over()

3 - Offset Function

  • Lead()
  • LAG()
  • First_Value()
  • Last_Value()
  • Nth_Value()

4 - Distribution Function.

  • PERCENT_RANK()
  • CUME_DIST()
  • PERCENT_COUNT()
  • PERCENT_DISC()

窗口函数的作用:

1. topN问题:排序开窗函数+子查询

2. 组内比较问题:聚合开窗函数+子查询,也可以用关联子查询做

3. 移动平均问题:聚合开窗函数

窗口函数语法:

<窗口函数> over (partition by <用于分组的列名>
                     order by <用于排序的列名>)

窗口函数分为排序开窗函数【rank(),dense_rank(),row_number()】和聚合开窗函数【sum(),avg(),count(),max(),min()】。

窗口函数只写在select中,因为它是对where和group by子句处理后的结果进行操作。

 

2.2 排序函数

  • rank() :允许并列,占用下一个名次 ---- 1、1、3
  • dense_rank():允许并列,不占用下一个名次 ----- 1、1、2
  • row_number():连续编号,不考虑排名 ----1、2、3
  • nfile():( 此函数在数据分析中应用较多,比如由于数据量大,需要将数据平均分配到N个并行的进程分别计算,此时就可以用NFILE(N)对数据进行分组,由于记录数不一定被N整除,所以数据不一定完全平均,多出来的部分则依次加给第一组、第二组···直到分配完。)

    用途:将分区中的有序数据分为n个桶,记录桶号。

例子࿱

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值