1

changes_cc各ユーザーによるテーブル内のエントリ数のリストを取得しようとしています。すべてのユーザーがエントリを作成したわけではありませんが、何らかの理由で、エントリが 0 の各ユーザーに対して「1」が返されます。JOINed テーブルのエントリをカウントしているためだと思います。代わりに「0」になるようにするにはどうすればよいですか?

SELECT COUNT(*) as num, users.id, realname, username
            FROM changes_cc
            RIGHT JOIN users
                ON changes_cc.user_id = users.id
            GROUP BY users.id
4

3 に答える 3

3

私はこれがうまくいくはずだと思います.changes_ccテーブルの特定のフィールドをカウントするのではなく、*をカウントします:

SELECT u.id, realname, username, COUNT(c.id) as num
FROM users u 
    LEFT JOIN changes_cc c 
        ON u.user_id = c.id
GROUP BY u.id

LEFT JOIN私は aよりも a を読む方が好きRIGHT JOINですが、どちらもOUTER JOINs同じように機能します。

于 2013-03-22T02:41:08.840 に答える
2

COUNT(*)( null 値を含むレコードをカウントする)を使用しないでください。正しいテーブルからすべてのレコードが返されるため、通常は少なくとも 1 が返されるためです。カウントする列名を指定すると、NON_NULLCOUNTのみがカウントされるため、必要な結果が得られます。

SELECT  COUNT(changes_cc.user_id) as num, 
        users.id, 
        realname, 
        username
FROM    changes_cc
        RIGHT JOIN users
            ON changes_cc.user_id = users.id
GROUP   BY users.id
于 2013-03-22T02:41:01.977 に答える
1

を使用する代わりに、 をcount(*)使用してcount(changes_cc.user_id)ください。

問題は*、「右結合」テーブルで NULL 以外の値をカウントするのではなく、( を使用して) 行をカウントしていることです。

于 2013-03-22T02:41:19.280 に答える