多个表中的COUNT个问题

时间:2012-09-19 13:09:24

标签: mysql join count

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

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

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

另外,我可以总结一下t_中table_two中不存在的所有用户吗? 就像用户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中t为0的所有用户,t1之和的用户ID是错误的。如果不可能,那么我只会做两个查询。

2 个答案:

答案 0 :(得分: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 FIDDLE DEMO

答案 1 :(得分:0)

如果用户在t2中有多行,那么t2中的每一行都会显示t1。 尝试使用(仅)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

性能明智的两个不同的查询可能会更好。