? ? ? ? ? SQL窗口函数说的是在查询现有的结果集的特定“窗口”(即数据集的一个分区或整个结果集)再作处理统计(排序,聚合统计,如count,sum等),最简单的理解就是执行两次sql,第二次执行sql是在第一次的sql查询数据上进行。
??sql窗口函数的组成:? 聚合函数(或者窗口函数) + over 两部分组成,如下图:
<聚合函数 或者 窗口函数> OVER ([PARTITION BY <列名>] ORDER BY <排序用列名>)
SELECT
id,
value,
ROW_NUMBER() OVER (ORDER BY value ASC) AS row_num
FROM
table_name;
SELECT
department_id,
salary,
avg(salary) OVER (PARTITION BY department_id) AS avg_salary
FROM
employees;
?根据部门id统计部门的平均薪资。
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
?计算的是日环比增长率,即当前销售额相较于前一天的增长百分比。? 现在很多报表都要求有环比数据,小项目,或数据量小的情况下,使用窗口函数是个不错的选择。?
?