SQL 聚合函数和窗口函数怎么结合使用?

聚合函数结合窗口函数可在保留每行数据的同时进行分组分析。1. 使用SUM、AVG等配合OVER(PARTITION BY)将分组结果广播到每行,如显示部门总工资;2. 计算个人与组内均值的差值,用于绩效对比;3. 求占比指标,如个人工资占部门总额的比例,需注意数值类型避免整除;4. 结合ORDER BY实现累计计算,如按日期累加收入。核心是聚合函数通过OVER子句实现行级展示组内统计,无需JOIN或子查询,提升效率与可读性。

SQL 聚合函数和窗口函数怎么结合使用?

聚合函数和窗口函数结合使用,可以在保留原始行数据的同时,基于分组聚合结果进行更复杂的分析。关键在于将聚合函数作为窗口函数的一部分,使用 OVER() 子句定义其作用范围。

1. 聚合函数作为窗口函数使用

把 SUM、AVG、COUNT 等聚合函数放在 OVER(PARTITION BY …) 中,就能按组计算聚合值,并广播到每一行。

例如:统计每个部门员工的工资总额,并显示在每行记录中:

SELECT name, dept, salary,
    SUM(salary) OVER(PARTITION BY dept) AS total_dept_salary
FROM employees;

这样每行都会显示该员工所在部门的总工资,而不会像 GROUP BY 那样只返回一行。

2. 对比个人与组内平均值

常用于找出哪些员工高于或低于部门平均水平。

SELECT name, dept, salary,
    salary – AVG(salary) OVER(PARTITION BY dept) AS diff_from_avg
FROM employees;

这个查询展示每个人工资与部门均值的差额,适合做绩效分析。

3. 计算占比类指标

结合聚合窗口函数可以轻松算出占比,比如某员工工资占部门总工资的比例。

SQL 聚合函数和窗口函数怎么结合使用?

Brev AI

Brev.ai:搭载Suno AI V3.5技术的免费AI音乐生成器

SQL 聚合函数和窗口函数怎么结合使用?158

查看详情 SQL 聚合函数和窗口函数怎么结合使用?

SELECT name, dept, salary,
   &nbsp>salary * 100.0 / SUM(salary) OVER(PARTITION BY dept) AS percent_of_dept
FROM employees;

注意乘以 100.0 是为了防止整数除法导致小数丢失。

4. 结合排序实现动态累计

在时间序列分析中,常用 SUM 配合 ORDER BY 实现累计求和。

SELECT date, revenue,
    SUM(revenue) OVER(ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS cum_revenue
FROM daily_sales;

这会逐日累加收入,形成趋势线。加上 PARTITION BY 还可按年/月分区累计。

基本上就这些常见用法。核心是理解:聚合函数 + OVER = 每行都能看到组内汇总信息。这种写法避免了子查询和 JOIN,代码更简洁,性能也通常更好。

聚合函数 ai sql count select date 值类型

上一篇
下一篇