本笔记为阿里云天池龙珠计划SQL训练营的学习内容,链接为:https://tianchi.aliyun.com/specials/promotion/aicampsql?
Part1:学习知识点概要
本笔记主要记录SQL语言窗口函数的内容。
Part2:学习内容
一、窗口函数
窗口函数也称为OLAP(OnLine Analytical Processing)函数,对数据库数据进行实时分析处理。
# []中的内容可省略
<窗口函数> OVER ([PARTITION BY <列名>]
ORDER BY <排序用列名>)
PARTITON BY用来分组,即选择要看哪个窗口。类似于GROUP BY 子句的分组功能,但是并不具备GROUP BY 子句的汇总功能,并不会改变原始表中记录的行数。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ORDER BY用来排序,即决定窗口内按那种规则(字段)来排序。窗口函数中的ORDER BY与SELECT语句末尾的ORDER BY一样,可通过关键字ASC/DESC来指定升/降序,默认ASC。
窗口函数可以分为两类:
- ?SUM、MAX、MIN、AVG等聚合函数;结果是一个累计到当前行的聚合函数值。
- RANK、DENSE_RANK、ROW_NUMBER等排序用的专用窗口函数。
?窗口函数的应用:指定更加详细的汇总范围;计算移动平均
# PRECEDING(“之前”), 将框架指定为 “截止到之前 n 行”,加上自身行
# FOLLOWING(“之后”), 将框架指定为 “截止到之后 n 行”,加上自身行
# BETWEEN 1 PRECEDING AND 1 FOLLOWING,将框架指定为 “之前1行” + “之后1行” + “自身行”
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
备注:
- 原则上,窗口函数只能在SELECT子句中使用。
- 窗口函数OVER 中的ORDER BY 子句并不影响最终结果的排序。其只是用来决定窗口函数按何种顺序计算。
二、GROUPING运算符
# 常规GROUP BY 只能得到每个分类的小计,需要计算分类的合计,可用 ROLLUP关键字
# ROLLUP 可以对多列进行汇总求小计和合计
SELECT product_type
,regist_date
,SUM(sale_price) AS sum_price
FROM product
GROUP BY product_type, regist_date WITH ROLLUP
Part3:学习问题与解答
Part4:学习思考与总结
|