SQL 计算小计和总计
时间:2022-07-22
本文章向大家介绍SQL 计算小计和总计,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
我们要统计 emp 表中每个部门的工资及公司的总工资,该怎么写 SQL 呢?
emp 表的数据
有一个完美的解决方案是使用 GROUP BY
子句的 ROLLUP
扩展。ROLLUP
在分组统计的基础上,再对结果进行相同操作(SUM
、AVG
、COUNT
)的聚合。
在 MySQL
中,解决这个问题的 SQL 可以这么写:
SELECT IFNULL(deptno, 'TOTAL') AS deptno, SUM(sal) sal FROM emp GROUP BY deptno WITH ROLLUP ;
注意:
-
ORDER BY
不能在ROLLUP
中使用,两者为互斥关键字; - 如果分组的列包含
NULL
值,那么ROLLUP
的结果可能不正确,因为使用ROLLUP
进行分组统计时,NULL
具有特殊意义。因此在进行ROLLUP
操作前先将分组列中的NULL
值转换成一个不可能存在的值,或者没有特别含义的值。
对于不支持 ROLLUP
语法的数据库,可以使用 UNION/UNION ALL
实现相同的效果。
使用 UNION/UNION ALL
的解决方案:
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 上实现的思路:
- 按照各个组合条件分别计算出结果;
- 使用
UNION ALL
把 1 中统计出来的结果合并到一块。
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
- 细说WebSocket - Node篇
- TensorFlow从0到1丨 第六篇:解锁梯度下降算法
- .Net多线程编程—误用点分析
- Web开发常见的几个漏洞解决方法
- .Net多线程编程—同步机制
- .Net多线程编程—Parallel LINQ、线程池
- 没有自己的服务器如何学习生物数据分析(下篇)
- .Net多线程编程—并发集合
- .Net多线程编程—任务Task
- 学会WCF之试错法——安全配置报错分析
- 生物信息学技能面试题(第5题)-根据GTF画基因的多个转录本结构
- 学会WCF之试错法——超时
- 学会WCF之试错法——客户端调用基础
- 【直播】我的基因组58:用R包SNPRelate来对我的基因型跟hapmap计划数据比较
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解
- “Ajax请求后台,后台两次session不一致”问题解决
- Angularjs动态加载ECharts(一)
- NodeMCU连接wifi语句报错:“stdin:1: bad argument #1 to 'config' (config table not found!)”
- Angularjs动态加载ECharts(二)
- 【LeetCode】每日一题(8.3)
- LeetCode精选好题(四)
- 【Android 直播软件开发:音视频硬解码篇】
- 知更鸟主题修改CSS:让凌乱的标签变得整洁清爽
- 浅谈 Android Dex 文件
- Tcp连接建立与连接释放
- Python Django开发 异常及解决办法(三)
- 有赞零售小票打印跨平台解决方案
- Angular [(ngModel)]的ng-dirty设置时机
- 有赞订单导出的配置化实践
- k2路由器刷系统