为什么 GROUP BY 子句缺少行

Den*_*nis 3 sql-server group-by

无法理解GROUP BY子句的奇怪行为:

SELECT id, SUM(num) as sum
FROM (
    SELECT 1 AS id, 2 AS num UNION
    SELECT 1, 3) AS a
GROUP BY id
Run Code Online (Sandbox Code Playgroud)

结果是:

SELECT id, SUM(num) as sum
FROM (
    SELECT 1 AS id, 2 AS num UNION
    SELECT 1, 3) AS a
GROUP BY id
Run Code Online (Sandbox Code Playgroud)

SELECT id, SUM(num) as sum
FROM (
    SELECT 1 AS id, 2 AS num UNION
    SELECT 1, 2 /*!*/) AS a
GROUP BY id
Run Code Online (Sandbox Code Playgroud)

结果是:

id  | sum |
----|-----|
1   | 5   |
Run Code Online (Sandbox Code Playgroud)

Low*_*n M 11

UNION 排除重复行。

你想UNION ALL在这个例子中使用:

 SELECT id, SUM(num) as sum
 FROM (
     SELECT 1 AS id, 2 AS num UNION ALL
     SELECT 1, 2 /*!*/) AS a
 GROUP BY id
Run Code Online (Sandbox Code Playgroud)

结果:

id          sum
----------- -----------
1           4
Run Code Online (Sandbox Code Playgroud)