在MySQL上的列中汇总行值

时间:2017-04-27 14:08:47

标签: mysql

这是我对数据库MySQL的SQL查询:

mysql> SELECT
    sArea,
    `2014`,
    `2015`,
    `2016`,
    `2017`
FROM
    `doTableAreas`
WHERE
    LEFT (sArea, 2) IN ('XM');

这是输出:

+-------+------+------+------+------+
| sArea | 2014 | 2015 | 2016 | 2017 |
+-------+------+------+------+------+
| XM2A  |    0 |    1 |    4 |    5 |
| XM2B  |    0 |  231 |  527 |   51 |
| XM4A  |    0 |   87 |  287 |   46 |
| XM4B  |    0 |   77 |  112 |    7 |
| XM4C  |    0 |    0 |   42 |    1 |
| XM6A  |    0 |   57 |  108 |   18 |
| XM7A  |    0 |  280 |  456 |   52 |
| XM7B  |    0 |  568 |  579 |   47 |
+-------+------+------+------+------+
8 rows in set

如何做这个其他输出,相反,总共一年?

+-------+------+------+------+------+
| sArea | 2014 | 2015 | 2016 | 2017 |
+-------+------+------+------+------+
| XM2A  |    0 |    1 |    4 |    5 |
| XM2B  |    0 |  231 |  527 |   51 |
| XM4A  |    0 |   87 |  287 |   46 |
| XM4B  |    0 |   77 |  112 |    7 |
| XM4C  |    0 |    0 |   42 |    1 |
| XM6A  |    0 |   57 |  108 |   18 |
| XM7A  |    0 |  280 |  456 |   52 |
| XM7B  |    0 |  568 |  579 |   47 |
| Total |    0 |  1301|  2115|   227|
+-------+------+------+------+------+

提前谢谢。

2 个答案:

答案 0 :(得分:1)

使用Union应该有效:

SELECT
    sArea,
    `2014`,
    `2015`,
    `2016`,
    `2017`
FROM
    `doTableAreas`
WHERE
    LEFT (sArea, 2) IN ('XM')
Union
SELECT
    "Total",
    sum(`2014`),
    sum(`2015`),
    sum(`2016`),
    sum(`2017`)
FROM
    `doTableAreas`
WHERE
    LEFT (sArea, 2) IN ('XM');

答案 1 :(得分:1)

GROUP BY修饰符with ROLLUP就是为此而构建的。

mysql> SELECT
    sArea,
    sum(`2014`) as `2014`,
    sum(`2015`) as `2015`,
    sum(`2016`) as `2016`,
    sum(`2017`) as `2017`
FROM
    `doTableAreas`
WHERE
    LEFT (sArea, 2) IN ('XM');
GROUP BY SArea, `2014`, `2015`, `2016`, `2017` with rollup

虽然sarea将为NULL而不是说" total"

相关问题