SQL编程学习05-SQL高级处理

一 窗口函数

窗口函数语法

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

<窗口函数>的位置可以放置以下两种函数:

  1. 专用窗口函数,比如rank,dense_rank,row_number等
  2. 聚合函数,如sum,avg,count,max,min等

窗口函数功能

  • 同时具有分组(可省略不写,即可不进行分组)和排序的功能
  • 不减少原表的行数,所以经常用来在每组内排名

二 WITH ROLLUP

ROLLUPGROUP BY子句的扩展,在group分组字段的基础上再进行统计数据。 ROLLUP选项允许包含表示小计的额外行,通常称为超级聚合行,以及总计行。

三 练习题

5.1 查询当前商品以及之前商品中的最高价格,作为当前商品的 最大价格

-- 使用with rollup 小计
SELECT regist_date
	   ,sale_price
	   ,SUM(sale_price) AS sum_price 
  FROM product
 GROUP BY regist_date, sale_price WITH ROLLUP
 ORDER BY regist_date IS NULL DESC, regist_date asc;

结果如下:
在这里插入图片描述

-- use 窗口函数
SELECT regist_date
	   ,product_name
	   ,sale_price
	   ,sum(sale_price) over (PARTITION by regist_date 
								  ORDER BY regist_date IS NULL DESC,regist_date) 
								  as day_sum_price
	FROM product;

结果如下:在这里插入图片描述

5.2 按照登记日期(regist_date)升序进行排列的各日期的销售单价(sale_price)的总额

将登记日期为NULL 的“运动 T 恤”记录排在第 1 位(也就是将其看作比其他日期都早)

SELECT regist_date
	   ,sale_price
	   ,SUM(sale_price) AS sum_price 
  FROM product
 GROUP BY regist_date, sale_price WITH ROLLUP
 ORDER BY regist_date IS NOT NULL, regist_date;

结果如下:
在这里插入图片描述

5.3 思考

PARTITION BY是用来分组,即将数据分成多个窗口。如果不使用这个关键字,则是把整个查询结果作为一个窗口。
例如:

SELECT product_name
       ,product_type
       ,sale_price
       ,RANK() OVER (# PARTITION BY product_type
                         ORDER BY sale_price) AS ranking_part
	   ,RANK() OVER (PARTITION BY product_type
                         ORDER BY sale_price) AS ranking_no_part
  FROM product; 

– 思考二
根据SQL语句的执行顺序和窗口函数的作用(有选择的去某一部分数据进行汇总、计算和排序),窗口函数可以在SELECTorder by 子句中使用。

执行顺序:FROM 》WHERE》GROUP BY》HAVE》SELECT》ORDER BY

如何在order 子句使用窗口函数呢?
将使用了窗口函数的查询结果看成视图,在其基础上进行查询,order by子句就可以使用窗口函数新增的列名了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值