这是我对数据库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|
+-------+------+------+------+------+
提前谢谢。
答案 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"