美文网首页
MySQL 转置结果集以利于跨行计算

MySQL 转置结果集以利于跨行计算

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

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

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

一.需求

对来自多个行的数据进行计算。
为便于计算,可以把这些行转置到列中,这样所有需要的值都包含于1行中。

deptno 20 是总工资最高的部门,执行下列查询可以确认这一列:

mysql> select deptno, sum(sal) as sal
-> from emp
-> group by deptno;
+--------+----------+
| deptno | sal |
+--------+----------+
| 10 | 8750.00 |
| 20 | 10875.00 |
| 30 | 9400.00 |
+--------+----------+
3 rows in set (0.00 sec)

现在要计算deptno 20 和deptno 10之间以及deptno 20 和deptno 30 之间的总工资之差。

二.解决方案

使用聚集函数sum及case表达式转换总和,然后,在select列表中编写表达式:

select  d20_sal - d10_sal as d20_10_diff,
        d20_sal - d30_sal as d20_30_diff
  from  (
select  sum(case when deptno = 10 then sal end) as d10_sal,
        sum(case when deptno = 20 then sal end) as d20_sal,
        sum(case when deptno = 30 then sal end) as d30_sal
  from  emp
        ) totals_by_dept;

测试记录:

mysql> select  d20_sal - d10_sal as d20_10_diff,
    ->         d20_sal - d30_sal as d20_30_diff
    ->   from  (
    -> select  sum(case when deptno = 10 then sal end) as d10_sal,
    ->         sum(case when deptno = 20 then sal end) as d20_sal,
    ->         sum(case when deptno = 30 then sal end) as d30_sal
    ->   from  emp
    ->         ) totals_by_dept;
+-------------+-------------+
| d20_10_diff | d20_30_diff |
+-------------+-------------+
|     2125.00 |     1475.00 |
+-------------+-------------+
1 row in set (0.00 sec)

相关文章

  • MySQL 转置结果集以利于跨行计算

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

  • MySQL 反向转置结果集

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

  • MySQL 把结果集转置为多行

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

  • MySQL 转置带小计的结果集

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

  • MySQL 转置已分等级的结果集

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

  • MySQL 将结果集转置为一行

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

  • MySQL 给两次转置的结果集增加列头

    备注:测试数据库版本为MySQL 8.0 测试数据: 一.需求 把两个结果集叠在一起,然后把他们转置为两列,另外,...

  • SQL 转置计算

    转置即旋转数据表的横纵方向,常用来改变数据布局,以便用新的角度观察。有些转置算法比较简单,比如行转列、列转行、双向...

  • MySQL 行列转置

    建立测试表: 原始数据: 需要转置为: 即:将 事件名(event_name)作为纵向表头,日期(dt)作为横向表...

  • 06-支持向量机原理(一)线性支持向量机

    1、SVM的超平面 这里可以得到一个结论W向量的转置是这条超平面的转置 1.1、计算点到超平面的距离 1.2、计算...

网友评论

      本文标题:MySQL 转置结果集以利于跨行计算

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