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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。