0

次の SQL ステートメントを使用して、COUNT()2 つの異なるテーブルの行を取得しています。唯一の問題は、結果payment_countupload_count結果が常に同じ値を返すことです。

COUNT()テーブルからのみの場合payments、カウントは正確です。同じステートメントで両方のテーブルからカウントした場合にのみ、COUNT()for both が と同じCOUNT()になりupload_countます。それが理にかなっていることを願っています。カウントが個別になるようにするにはどうすればよいですか?

SELECT 
    u.id, 
    u.name,
    COUNT(p.id) as payment_count,
    COUNT(b.id) as upload_count
FROM users as u
    INNER JOIN payments as p
        ON u.id = p.user_id
    LEFT OUTER JOIN orders as o
        ON u.id = o.user_id
            AND o.order_status = 1
    LEFT OUTER JOIN uploads as b
        ON u.id = b.user_id
WHERE u.package != 1
AND o.id IS NULL
GROUP BY u.id
HAVING COUNT(p.id) >= 6
ORDER BY RAND()
LIMIT 10
4

1 に答える 1

2

COUNT() は、遭遇したすべての非 NULL 値をカウントします。値が異なるかどうかは気にしません。COUNT(DISTINCT フィールド名) は個別の値をカウントします。一意の値をカウントする場合は、COUNT DISTINCT を使用します。

于 2013-04-10T18:14:04.203 に答える