使用GROUP BY 子句结合聚合函数实现数据汇总
SELECT a.employee_id,a.employee_name, SUM(b.salary) AS 总工资 FROM employee a
INNER JOIN salary b
ON a.employee_id = b.employee_id
GROUP BY a.employee_id,a.employee_name
ROLLUP
如果需要显示每个员工的各种工资类型的金额及总金额,改如何实现
1.使用UNION合并
SELECT a.employee_id,a.employee_name, b.salary_type ,b.salary FROM employee a
INNER JOIN salary b
ON a.employee_id = b.employee_id
UNION
SELECT a.employee_id,a.employee_name, '总工资' ,sum(b.salary) FROM employee a
INNER JOIN salary b
ON a.employee_id = b.employee_id
GROUP BY a.employee_id,a.employee_name
2.使用ROLLUP
SELECT a.employee_name, b.salary_type ,sum(b.salary) FROM employee a
INNER JOIN salary b
ON a.employee_id = b.employee_id
GROUP BY ROLLUP(a.employee_name,b.salary_type)
画红框的行就是需要的汇总行(总工资)
ROLLUP 的作用是对指定列集进行组合再汇总。ROLLUP(a,b)中,a是一个列集,b 是一个列集。在 ROLLUP 中,这两个列集的组合结果有(a,b)、(a)和0三种,ROLLUP(a,b)在返回结果上相当于 GROUP BY(ab)、GROUP BY(a)和 GROUP BY()三个分组结果集的汇总,其中GROUP BY()是对a和b的整体汇总,即表示无分组情况。
- ROLLUP(a,b,c)组合的方法: (a,b,c)、 (a,b)、 (a)、 ()。
- ROLLUP((a,b),c,d)组合的方法: ((a,b),c,d)、 ((a,b),c)、 (a,b)、()。
学习参考资料:《跟韩老师学 SQL Server 数据库设计与开发》