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

結果は条件によるグループが欠落していることを示していますが、すでに両方のフィールドが使用されています。
どこが間違っていますか?

また、 t1 の 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 が 0 のすべてのユーザーの t1 の合計に対してユーザー ID が間違っていても問題ありません。不可能な場合は、2 つのクエリを実行します。

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

パフォーマンスに関しては、2 つの異なるクエリの方が優れている可能性があります。

于 2012-09-19T15:50:35.563 に答える