美文网首页
MySQL 计算所有表达式组合的小计

MySQL 计算所有表达式组合的小计

作者: 只是甲 | 来源:发表于2021-02-05 10:05 被阅读0次

备注:测试数据库版本为MySQL 8.0

如需要scott用户下建表及录入数据语句,可参考:
scott建表及录入数据sql脚本

一.需求

对JOB/DEPTNO的每种组合,求按deptno和job的总工资。并求表EMP中所有工资的总计。

返回的结果集应如:
+--------+-----------+-------------------------+----------+
| deptno | job | category | sal |
+--------+-----------+-------------------------+----------+
| 20 | CLERK | TOTAL BY DEPT AND JOB | 1900.00 |
| 30 | SALESMAN | TOTAL BY DEPT AND JOB | 5600.00 |
| 20 | MANAGER | TOTAL BY DEPT AND JOB | 2975.00 |
| 30 | MANAGER | TOTAL BY DEPT AND JOB | 2850.00 |
| 10 | MANAGER | TOTAL BY DEPT AND JOB | 2450.00 |
| 20 | ANALYST | TOTAL BY DEPT AND JOB | 6000.00 |
| 10 | PRESIDENT | TOTAL BY DEPT AND JOB | 5000.00 |
| 30 | CLERK | TOTAL BY DEPT AND JOB | 950.00 |
| 10 | CLERK | TOTAL BY DEPT AND JOB | 1300.00 |
| NULL | CLERK | TOTAL BY JOB | 4150.00 |
| NULL | SALESMAN | TOTAL BY JOB | 5600.00 |
| NULL | MANAGER | TOTAL BY JOB | 8275.00 |
| NULL | ANALYST | TOTAL BY JOB | 6000.00 |
| NULL | PRESIDENT | TOTAL BY JOB | 5000.00 |
| 10 | NULL | TOTAL BY DEPT | 8750.00 |
| 20 | NULL | TOTAL BY DEPT | 10875.00 |
| 30 | NULL | TOTAL BY DEPT | 9400.00 |
| NULL | NULL | GRAND TOTAL FOR TABLE | 29025.00 |
+--------+-----------+-------------------------+----------+

二.解决方案

最近几年,group by中早呢更加的拓展使则个问题相当容易解决。
如果使用的平台没有提供这种计算各层小计的拓展,那么必须用自连接或标量子查询计算。

select  deptno, job,
        'TOTAL BY DEPT AND JOB' as category,
        sum(sal)  as sal
  from  emp
 group  by  deptno, job
union all
select  null, job, 'TOTAL BY JOB', sum(sal)
  from  emp
 group  by job
union all
select  deptno, null,'TOTAL BY DEPT', sum(sal)
  from  emp
 group  by deptno
union all
select  null, null,'GRAND TOTAL FOR TABLE', sum(sal)
  from  emp;

测试记录:

mysql> select  deptno, job,
    ->         'TOTAL BY DEPT AND JOB' as category,
    ->         sum(sal)  as sal
    ->   from  emp
    ->  group  by  deptno, job
    -> union all
    -> select  null, job, 'TOTAL BY JOB', sum(sal)
    ->   from  emp
    ->  group  by job
    -> union all
    -> select  deptno, null,'TOTAL BY DEPT', sum(sal)
    ->   from  emp
    ->  group  by deptno
    -> union all
    -> select  null, null,'GRAND TOTAL FOR TABLE', sum(sal)
    ->   from  emp;
+--------+-----------+-------------------------+----------+
| deptno | job       | category                | sal      |
+--------+-----------+-------------------------+----------+
|     20 | CLERK     | TOTAL BY DEPT AND JOB  |  1900.00 |
|     30 | SALESMAN  | TOTAL BY DEPT AND JOB  |  5600.00 |
|     20 | MANAGER   | TOTAL BY DEPT AND JOB  |  2975.00 |
|     30 | MANAGER   | TOTAL BY DEPT AND JOB  |  2850.00 |
|     10 | MANAGER   | TOTAL BY DEPT AND JOB  |  2450.00 |
|     20 | ANALYST   | TOTAL BY DEPT AND JOB  |  6000.00 |
|     10 | PRESIDENT | TOTAL BY DEPT AND JOB  |  5000.00 |
|     30 | CLERK     | TOTAL BY DEPT AND JOB  |   950.00 |
|     10 | CLERK     | TOTAL BY DEPT AND JOB  |  1300.00 |
|   NULL | CLERK     | TOTAL BY JOB            |  4150.00 |
|   NULL | SALESMAN  | TOTAL BY JOB            |  5600.00 |
|   NULL | MANAGER   | TOTAL BY JOB            |  8275.00 |
|   NULL | ANALYST   | TOTAL BY JOB            |  6000.00 |
|   NULL | PRESIDENT | TOTAL BY JOB            |  5000.00 |
|     10 | NULL      | TOTAL BY DEPT           |  8750.00 |
|     20 | NULL      | TOTAL BY DEPT           | 10875.00 |
|     30 | NULL      | TOTAL BY DEPT           |  9400.00 |
|   NULL | NULL      | GRAND TOTAL FOR TABLE   | 29025.00 |
+--------+-----------+-------------------------+----------+
18 rows in set (0.11 sec)

相关文章

  • MySQL 计算所有表达式组合的小计

    备注:测试数据库版本为MySQL 8.0 如需要scott用户下建表及录入数据语句,可参考:scott建表及录入数...

  • MySQL 计算简单的小计

    备注:测试数据库版本为MySQL 8.0 如需要scott用户下建表及录入数据语句,可参考:scott建表及录入数...

  • 概念解释:并行计算、显卡、驱动、CUDA、GPU、深度学习等之间

    并行计算: 是一种将特定计算,分解成可以同时进行的独立的较小计算的计算方式。然后重新组合或同步计算结果,形成原来较...

  • JAVA计算表达式

    JAVA计算数字表达式的值: 利用JS来计算: 利用栈来计算 参考 栈计算表达式:将所有的数字放入List中(优先...

  • SQLite 表达式

    SQLite 表达式 表达式是一个或多个值、运算符和计算值的SQL函数的组合。 SQL 表达式与公式类似,都写在查...

  • mysql数据库大小计算

    要想知道每个数据库的大小的话,步骤如下: 1、进入information_schema 数据库(存放了其他的数据库...

  • ceil,floor,round介绍

    ceil向上取整,向着更大的数,正负参与大小计算 floor向下取整,向着更小的数,正负参与大小计算 round四...

  • 查询优化

    MySql组合索引应该注意的细节 1. MySql 组合索引 MySQL组合索引具有...

  • springboot SPEL demo实战

    简介 SPEL 是一种强大的表达式语言。在Spring产品组合中,它是表达式计算的基础。它支持在运行时查询和操作对...

  • SQL server 常用的关键字 (二)

    9.计算 AVG : 表达式中所有值的平均值 COUNT:选定的行数 MAX:表达式中的 最高值 MIN: 表达式...

网友评论

      本文标题:MySQL 计算所有表达式组合的小计

      本文链接:https://www.haomeiwen.com/subject/vgldmktx.html