UNION ALL 后的 GROUP BY 不对结果进行分组
GROUP BY after UNION ALL doesn't group the result
我在这里阅读了一些关于 SO 的帖子,但找不到解决我的问题的方法。
我想将 3 个结果集合并为一个,但 GROUP BY 似乎不允许我对它们进行分组。相反,列会被覆盖。
这是我的 MYSQL 查询:
SELECT spent.cid AS cid, spent.clientname AS clientname, spent.sumyearone AS sumyearone, spent.sumyeartwo AS sumyeartwo, spent.sumyearthree AS sumyearthree
FROM (
SELECT yearone.cid AS cid, yearone.clientname AS clientname, yearone.sum AS sumyearone, 0 AS sumyeartwo, 0 AS sumyearthree
FROM (
...
) AS yearone
GROUP BY yearone.cid
UNION ALL
SELECT yeartwo.cid AS cid, yeartwo.clientname AS clientname, 0 AS sumyearone, yeartwo.sum AS sumyeartwo, 0 AS sumyearthree
FROM (
...
) AS yeartwo
GROUP BY yeartwo.cid
UNION ALL
SELECT yearthree.cid AS cid, yearthree.clientname AS clientname, 0 AS sumyearone, 0 AS sumyeartwo, yearthree.sum AS sumyearthree
FROM (
...
) AS yearthree
GROUP BY yearthree.cid
) AS spent
GROUP BY spent.cid
ORDER BY spent.cid DESC
如果我 运行 使用 GROUP BY spent.cid
的查询,我会得到以下结果
cid clientname sumyearone sumyeartwo sumyearthree
50 Jon Doe 1083 0 0
但是如果我 运行 它没有 GROUP BY spent.cid
我得到三个正确的 return 值:
cid clientname sumyearone sumyeartwo sumyearthree
50 Jon Doe 1083 0 0
50 Jon Doe 0 1602 0
50 Jon Doe 0 0 1367
不过我想要的是:
cid clientname sumyearone sumyeartwo sumyearthree
50 Jon Doe 1083 1602 1367
PS:如果我在字段声明中使用 null
而不是 0(即 null AS sumyeartwo
)
,我会得到类似的结果
谢谢
您可以使用 SUM
和 GROUP BY
来获取这些数字,例如:
SELECT spent.cid AS cid, spent.clientname AS clientname, SUM(spent.sumyearone) AS sumyearone, SUM(spent.sumyeartwo) AS sumyeartwo, SUM(spent.sumyearthree) AS sumyearthree
FROM (
SELECT yearone.cid AS cid, yearone.clientname AS clientname, yearone.sum AS sumyearone, 0 AS sumyeartwo, 0 AS sumyearthree
FROM (
...
) AS yearone
GROUP BY yearone.cid
UNION ALL
SELECT yeartwo.cid AS cid, yeartwo.clientname AS clientname, 0 AS sumyearone, yeartwo.sum AS sumyeartwo, 0 AS sumyearthree
FROM (
...
) AS yeartwo
GROUP BY yeartwo.cid
UNION ALL
SELECT yearthree.cid AS cid, yearthree.clientname AS clientname, 0 AS sumyearone, 0 AS sumyeartwo, yearthree.sum AS sumyearthree
FROM (
...
) AS yearthree
GROUP BY yearthree.cid
) AS spent
GROUP BY spent.cid, spent.clientname
ORDER BY spent.cid DESC
我在这里阅读了一些关于 SO 的帖子,但找不到解决我的问题的方法。
我想将 3 个结果集合并为一个,但 GROUP BY 似乎不允许我对它们进行分组。相反,列会被覆盖。
这是我的 MYSQL 查询:
SELECT spent.cid AS cid, spent.clientname AS clientname, spent.sumyearone AS sumyearone, spent.sumyeartwo AS sumyeartwo, spent.sumyearthree AS sumyearthree
FROM (
SELECT yearone.cid AS cid, yearone.clientname AS clientname, yearone.sum AS sumyearone, 0 AS sumyeartwo, 0 AS sumyearthree
FROM (
...
) AS yearone
GROUP BY yearone.cid
UNION ALL
SELECT yeartwo.cid AS cid, yeartwo.clientname AS clientname, 0 AS sumyearone, yeartwo.sum AS sumyeartwo, 0 AS sumyearthree
FROM (
...
) AS yeartwo
GROUP BY yeartwo.cid
UNION ALL
SELECT yearthree.cid AS cid, yearthree.clientname AS clientname, 0 AS sumyearone, 0 AS sumyeartwo, yearthree.sum AS sumyearthree
FROM (
...
) AS yearthree
GROUP BY yearthree.cid
) AS spent
GROUP BY spent.cid
ORDER BY spent.cid DESC
如果我 运行 使用 GROUP BY spent.cid
的查询,我会得到以下结果
cid clientname sumyearone sumyeartwo sumyearthree
50 Jon Doe 1083 0 0
但是如果我 运行 它没有 GROUP BY spent.cid
我得到三个正确的 return 值:
cid clientname sumyearone sumyeartwo sumyearthree
50 Jon Doe 1083 0 0
50 Jon Doe 0 1602 0
50 Jon Doe 0 0 1367
不过我想要的是:
cid clientname sumyearone sumyeartwo sumyearthree
50 Jon Doe 1083 1602 1367
PS:如果我在字段声明中使用 null
而不是 0(即 null AS sumyeartwo
)
谢谢
您可以使用 SUM
和 GROUP BY
来获取这些数字,例如:
SELECT spent.cid AS cid, spent.clientname AS clientname, SUM(spent.sumyearone) AS sumyearone, SUM(spent.sumyeartwo) AS sumyeartwo, SUM(spent.sumyearthree) AS sumyearthree
FROM (
SELECT yearone.cid AS cid, yearone.clientname AS clientname, yearone.sum AS sumyearone, 0 AS sumyeartwo, 0 AS sumyearthree
FROM (
...
) AS yearone
GROUP BY yearone.cid
UNION ALL
SELECT yeartwo.cid AS cid, yeartwo.clientname AS clientname, 0 AS sumyearone, yeartwo.sum AS sumyeartwo, 0 AS sumyearthree
FROM (
...
) AS yeartwo
GROUP BY yeartwo.cid
UNION ALL
SELECT yearthree.cid AS cid, yearthree.clientname AS clientname, 0 AS sumyearone, 0 AS sumyeartwo, yearthree.sum AS sumyearthree
FROM (
...
) AS yearthree
GROUP BY yearthree.cid
) AS spent
GROUP BY spent.cid, spent.clientname
ORDER BY spent.cid DESC