SQL Server中的聚合函数是处理数据时不可或缺的工具,它们能够帮助我们对数据进行汇总和分析。本文将深入探讨SQL Server中常用聚合函数的高级用法,包括SUM
、COUNT
、AVG
、MAX
、MIN
等,并结合实际场景展示如何灵活运用这些函数。
在SQL Server中,常用的聚合函数包括:
这些函数通常与GROUP BY
语句结合使用,以实现分组汇总。
窗口函数(Window Functions)允许我们在不破坏原始数据结构的情况下进行聚合操作。常见的窗口函数形式为OVER()
。
示例:计算每个部门员工的工资总和及个人工资占比
SELECT
Department,
Name,
Salary,
SUM(Salary) OVER (PARTITION BY Department) AS TotalSalaryPerDept,
CAST(Salary AS FLOAT) / SUM(Salary) OVER (PARTITION BY Department) * 100 AS SalaryPercentage
FROM Employees;
SUM(Salary) OVER (PARTITION BY Department)
:按部门分组计算工资总和。CAST(Salary AS FLOAT) / SUM(Salary) OVER (...) * 100
:计算个人工资占部门总工资的比例。通过CASE WHEN
语句,可以实现基于条件的聚合操作。
示例:统计男性和女性员工的数量
SELECT
COUNT(CASE WHEN Gender = 'Male' THEN 1 END) AS MaleCount,
COUNT(CASE WHEN Gender = 'Female' THEN 1 END) AS FemaleCount
FROM Employees;
CASE WHEN
用于指定条件。COUNT
仅统计满足条件的行。在某些复杂场景下,可以将聚合函数嵌套使用。
示例:计算各部门工资标准差
SELECT
Department,
STDEV(Salary) AS SalaryStdDev
FROM Employees
GROUP BY Department;
STDEV
是SQL Server提供的标准差计算函数。GROUP BY
可按部门计算工资标准差。通过子查询,可以先进行一次聚合,再在此基础上进一步处理。
示例:找出工资高于部门平均工资的员工
SELECT
e.Name,
e.Salary,
e.Department
FROM Employees e
JOIN (
SELECT Department, AVG(Salary) AS AvgSalary
FROM Employees
GROUP BY Department
) d ON e.Department = d.Department AND e.Salary > d.AvgSalary;
ROLLUP
和CUBE
可以生成额外的汇总行,适合多维度数据分析。
示例:使用ROLLUP生成部门和整体工资汇总
SELECT
COALESCE(Department, 'Total') AS Department,
SUM(Salary) AS TotalSalary
FROM Employees
GROUP BY ROLLUP(Department);
COALESCE
用于处理NULL
值,将其替换为Total
。ROLLUP
会自动添加一个汇总行。SQL Server支持将结果集转换为JSON格式,便于与其他系统集成。
示例:按部门汇总工资并输出为JSON
SELECT
Department,
SUM(Salary) AS TotalSalary
FROM Employees
GROUP BY Department
FOR JSON AUTO;
FOR JSON AUTO
将结果集转换为JSON格式。本文详细介绍了SQL Server中常用聚合函数的高级用法,包括窗口函数、条件聚合、嵌套聚合、子查询结合、ROLLUP/CUBE以及JSON输出等功能。这些技巧能够显著提升数据处理的灵活性和效率。