更新:这道题和上一道不同,当我在这道题中使用ROLLUP时,它会添加一个总计行,但我只想要一个C组来合并A组和B组,因此C组显示小计颜色 X、Y 和 Z。不需要总行。
我有这样的数据
Group Color Money
A X 100
A X 300
A Y 200
B X 200
B Y 300
B Y 100
B Z 110
我想创建一个包含 A 和 B 的新组 C
mysql有这样查询数据的吗?
Group Color SumMoney AvgMoney DataCount
A X 400 200 2
A Y 200 200 1
B X 200 200 1
B Y 400 200 2
B Z 110 110 1
C X 600 200 3
C Y 600 200 3
C Z 110 110 1
我认为 UNION 可以解决问题,但它也可能很慢并且语法会很长(更难维护(在这种情况下不是))。有什么建议么?谢谢!
最佳答案
在 MySQL 中使用 UNION ALL
:
SELECT
g.`group`,
g.color,
sum(g.money) AS SumMoney,
CAST(AVG(g.money) AS SIGNED) AS AvgMoney,
COUNT(g.`group`) AS DataCount
FROM
groups g
GROUP BY
g.`group`,
g.color
UNION ALL
SELECT
'C',
g.color,
sum(g.money) AS SumMoney,
CAST(AVG(g.money) AS SIGNED) AS AvgMoney,
COUNT(g.`group`) AS DataCount
FROM
groups g
GROUP BY
g.color
输出是:
group | color | SumMoney | AvgMoney | DataCount
-----------------------------------------------
A | X | 400 | 200 | 2
A | Y | 200 | 200 | 1
B | X | 200 | 200 | 1
B | Y | 400 | 200 | 2
B | Z | 110 | 110 | 1
C | X | 600 | 200 | 3
C | Y | 600 | 200 | 3
C | Z | 110 | 110 | 1
关于mysql - 如何在mysql中添加按新组分组的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35983024/