前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SQL 计算小计和总计

SQL 计算小计和总计

作者头像
白日梦想家
发布2020-07-18 18:32:01
1.8K0
发布2020-07-18 18:32:01
举报
文章被收录于专栏:SQL实现SQL实现

我们要统计 emp 表中每个部门的工资及公司的总工资,该怎么写 SQL 呢?

emp 表的数据

有一个完美的解决方案是使用 GROUP BY 子句的 ROLLUP 扩展。ROLLUP 在分组统计的基础上,再对结果进行相同操作(SUMAVGCOUNT)的聚合。

MySQL 中,解决这个问题的 SQL 可以这么写:

代码语言:javascript
复制
SELECT   IFNULL(deptno, 'TOTAL') AS deptno,  SUM(sal) sal FROM  emp GROUP BY deptno WITH ROLLUP ;

注意:

  1. ORDER BY 不能在 ROLLUP 中使用,两者为互斥关键字;
  2. 如果分组的列包含 NULL 值,那么 ROLLUP 的结果可能不正确,因为使用 ROLLUP 进行分组统计时,NULL 具有特殊意义。因此在进行 ROLLUP 操作前先将分组列中的 NULL 值转换成一个不可能存在的值,或者没有特别含义的值。

对于不支持 ROLLUP 语法的数据库,可以使用 UNION/UNION ALL 实现相同的效果。

使用 UNION/UNION ALL 的解决方案:

代码语言:javascript
复制
SELECT   deptno,SUM(sal) sal FROM  emp GROUP BY deptno UNION ALL SELECT   'TOTAL' AS deptno,SUM(sal) AS sal FROM  emp

如果我们想按照 deptno、job 以及 deptno/job 组合分别计算出工资合计值,又该怎么做呢?

要实现的效果如下图:

在 MySQL 上实现的思路:

  1. 按照各个组合条件分别计算出结果;
  2. 使用 UNION ALL 把 1 中统计出来的结果合并到一块。
代码语言:javascript
复制
SELECT   deptno AS '部门编号',job '职位',  '按部门和职位合计' AS '计算规则',  SUM(sal) '工资合计' FROM  emp GROUP BY deptno,jobUNION ALLSELECT   deptno,NULL,'按部门合计',SUM(sal)FROM  emp GROUP BY deptnoUNION ALLSELECT   NULL,job,'按职位合计',SUM(sal)FROM  emp GROUP BY jobUNION ALLSELECT   NULL,NULL,'公司总计',SUM(sal)FROM  emp 
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-02-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 SQL实现 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档