DataWhale SQL 组队Day5—窗口函数

1 知识点梳理

在这里插入图片描述

1.1 窗口函数

窗口函数的基本语法:

--[ ] 中的内容可以省略
<窗口函数> OVER ([PARTITION BY <列名>]
                     ORDER BY <排序用列名>)
                     

1.2 窗口函数的的应用

1.2.1 基本语法

--PRECEDING(“之前”), 将框架指定为 “截止到之前 n 行”,加上自身行

<窗口函数> OVER (ORDER BY <排序用列名>
                 ROWS n PRECEDING )
--FOLLOWING(“之后”), 将框架指定为 “截止到之后 n 行”,加上自身行

--BETWEEN 1 PRECEDING AND 1 FOLLOWING,将框架指定为 “之前1行”
-- + “之后1行” + “自身”                   
<窗口函数> OVER (ORDER BY <排序用列名>
                 ROWS BETWEEN n PRECEDING AND n FOLLOWING)            

1.2.2 例子

SELECT  product_id
       ,product_name
       ,sale_price
       ,AVG(sale_price) OVER (ORDER BY product_id
                               ROWS 2 PRECEDING) AS moving_avg
       ,AVG(sale_price) OVER (ORDER BY product_id
                               ROWS BETWEEN 1 PRECEDING 
                                        AND 1 FOLLOWING) AS moving_avg  
  FROM product  

ROWS 2 PRECEDING:
在这里插入图片描述
ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING:
在这里插入图片描述

1.3 ROLLUP - 计算合计及小计

SELECT  product_type
       ,regist_date
       ,SUM(sale_price) AS sum_price
  FROM product
 GROUP BY product_type, regist_date WITH ROLLUP 

在这里插入图片描述
在这里插入图片描述

2 练习题

2.1

请说出针对本章中使用的 product(商品)表执行如下 SELECT 语句所能得到的结果。
在这里插入图片描述
运行结果:按照product_id的顺序,比较sale_price,新增的Current_max_price列保留当前的sale_price最大值。
在这里插入图片描述

2.2

继续使用product表,计算出按照登记日期(regist_date)升序进行排列的各日期的销售单价(sale_price)的总额。排序是需要将登记日期为NULL 的“运动 T 恤”记录排在第 1 位(也就是将其看作比其他日期都早)

 SELECT product_name
,product_id,sale_price,regist_date
,sum(sale_price) OVER (PARTITION BY regist_date)
FROM product;

2.3 思考题

① 窗口函数不指定PARTITION BY的效果是什么?
② 为什么说窗口函数只能在SELECT子句中使用?实际上,在ORDER BY 子句使用系统并不会报错。

1.会将当前表格看成一个大窗口进行计算。
2.窗口函数一般对where或者group by子句处理后的数据进行操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值