1

我正在尝试计算 2 个表,但我没有看到我的查询有什么问题,但我得到了错误的结果。用户 2 在 table_two 中不存在,所以零是正确的。

SELECT t1.creator_user_id, COUNT(t1.creator_user_id), COUNT(t2.user_id)
FROM table_one AS t1
LEFT JOIN table_two AS t2 ON t2.user_id = t1.creator_user_id
GROUP BY t1.creator_user_id, t2.user_id

实际结果

1 192 192
2 9 0

预期结果

1 16 12
2 9 0

结果表明按条件缺少组,但我已经使用了两个字段。
我哪里错了?

另外,我可以总结一下 table_two 中不存在的所有用户 t1 吗?就像用户 3 在 t1 中存在 21 次一样,那么结果将是:

1 16 12     (users with > 0 in t2 will need their own row)
2 30 0      (user 2=9 + user 3=21 => 30)

对于 t2 中为 0 的所有用户,用户 ID 对于 t1 的总和是错误的,这是可以的。如果不可能,那么我将只做两个查询。

4

2 回答 2

1

尝试这个:

SELECT t1.creator_user_id, 
       Count(*), 
       (SELECT Count(*) 
        FROM   table_two 
        WHERE  table_two.user_id = t1.creator_user_id) 
FROM   table_one AS t1 
GROUP  BY t1.creator_user_id

SQL 小提琴演示

于 2012-09-19T13:14:39.517 回答
0

如果用户在 t2 中有几行,那么 t1 也会为 t2 中的每一行显示。尝试使用(仅)t1.creator_user_id 进行分组

SELECT t1.creator_user_id, COUNT(t1.creator_user_id), COUNT(t2.user_id)
FROM table_one AS t1
LEFT JOIN table_two AS t2 ON t2.user_id = t1.creator_user_id
GROUP BY t1.creator_user_id

性能方面,两个不同的查询可能会更好。

于 2012-09-19T15:50:35.563 回答