【发布时间】:2017-01-11 09:47:43
【问题描述】:
我有两张桌子。 TABLE_A 和 TABLE_B。
两个表都维护列以保存 CREATION_USER。但该列在各个表中的名称不同。
我的动机是统计每个用户在两个表中创建的记录。 也就是说,将这两个查询的结果与很少的条件相结合。用户名不应重复,对于在两个表中都创建了记录的用户名,计数应该是它们的总和。
SELECT A.CREATION_USER_A AS "USER",
COUNT(*)
FROM TABLE_A A
GROUP BY A.CREATION_USER_A;
SELECT B.CREATION_USER_B AS "USER",
COUNT(*)
FROM TABLE_B B
GROUP BY B.CREATION_USER_B;
例如,
USER_A 在 TABLE_A 中创建了 2 条记录,
USER_B 在 TABLE_B 中创建了 3 条记录,并且
USER_C 在 TABLE_A 中创建了 4 条记录,在 TABLE_B 中创建了 3 条记录。
所以输出应该是这样的:
| USER | COUNT |
| USER_A | 2 |
| USER_B | 3 |
| USER_C | 7 |
我已经写了一个查询,但它执行得非常糟糕。
SELECT A.CREATION_USER_A AS "USER",
(COUNT(A.CREATION_USER_A)+(SELECT COUNT(CREATION_USER_B) FROM TABLE_B WHERE CREATION_USER_B = A.CREATION_USER_A)) AS "COUNT"
FROM TABLE_A A
GROUP BY A.CREATION_USER_A
UNION
SELECT B.CREATION_USER_B,
COUNT(B.CREATION_USER_B)
FROM TABLE_B B
WHERE B.CREATION_USER_B NOT IN (SELECT CREATION_USER_A FROM TABLE_A)
GROUP BY B.CREATION_USER_B;
请建议一种方法来完成这项工作。
【问题讨论】:
标签: oracle join group-by oracle10g union