SQL窗口函数
2024-01-09 23:30:18
一? 什么是SQL窗口函数?
? ? ? ? ? SQL窗口函数说的是在查询现有的结果集的特定“窗口”(即数据集的一个分区或整个结果集)再作处理统计(排序,聚合统计,如count,sum等),最简单的理解就是执行两次sql,第二次执行sql是在第一次的sql查询数据上进行。
二 sql窗口函数的组成
??sql窗口函数的组成:? 聚合函数(或者窗口函数) + over 两部分组成,如下图:
<聚合函数 或者 窗口函数> OVER ([PARTITION BY <列名>] ORDER BY <排序用列名>)
第一部分:聚合函数(或者窗口函数)
- ?聚合函数:SUM、MAX、MIN、AVG等
- ?专用窗口函数:RANK、DENSE_RANK等排序用的
第二部分:??over
- PARTITON BY??分组,即选择要看哪个窗口,与GROUP BY 相似,但是PARTITION BY 子句并不具备GROUP BY 子句的汇总功能,不会变更或影响数据表中记录的行数。?
- ORDER BY是用来排序,即决定窗口内,是按那种规则(字段)来排序的。?
三 ?SQL窗口函数使用
? ?1 使用sql窗口函数排名统计:
SELECT
id,
value,
ROW_NUMBER() OVER (ORDER BY value ASC) AS row_num
FROM
table_name;
2 使用?sql窗口聚合函数:
SELECT
department_id,
salary,
avg(salary) OVER (PARTITION BY department_id) AS avg_salary
FROM
employees;
?根据部门id统计部门的平均薪资。
3 环比统计(取前,取后)
SELECT
sale_date,
sales_amount,
(sales_amount - LAG(sales_amount, 1) OVER (ORDER BY sale_date)) AS daily_change,
(sales_amount / LAG(sales_amount, 1) OVER (ORDER BY sale_date)) - 1 AS percentage_change
FROM
order;
LAG(sales_amount, 1)
?获取的是前一天的销售额。(sales_amount - LAG(sales_amount, 1) OVER (ORDER BY sale_date))
?计算的是每日销售额与前一天销售额的差额,即日环比绝对增量。(sales_amount / LAG(sales_amount, 1) OVER (ORDER BY sale_date)) - 1
?计算的是日环比增长率,即当前销售额相较于前一天的增长百分比。
四 总结
? 现在很多报表都要求有环比数据,小项目,或数据量小的情况下,使用窗口函数是个不错的选择。?
?
文章来源:https://blog.csdn.net/qyhua/article/details/135490871
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!