
聚合函数和窗口函数结合使用,可以在保留原始行数据的同时,基于分组聚合结果进行更复杂的分析。关键在于将聚合函数作为窗口函数的一部分,使用 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. 计算占比类指标结合聚合窗口函数可以轻松算出占比,比如某员工工资占部门总工资的比例。
Teleporthq
一体化AI网站生成器,能够快速设计和部署静态网站
182
查看详情
SELECT name, dept, salary,
 >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,代码更简洁,性能也通常更好。
以上就是SQL 聚合函数和窗口函数怎么结合使用?的详细内容,更多请关注知识资源分享宝库其它相关文章!
相关标签: 聚合函数 ai sql count select date 值类型 大家都在看: SQL 分组查询如何实现多级统计? AI运行SQL如何保证数据安全_AI执行SQL时安全措施与方法 SQL 查询报错 “ambiguous column” 怎么解决? SQL 分组查询如何处理空字符串? AI执行SQL类型转换的方法_利用AI处理数据类型转换教程






发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。