2013-04-10 89 views
0

我正在使用以下SQL語句對來自兩個不同表的COUNT()行。唯一的問題是payment_countupload_count結果總是返回相同的值。MySQL從多個表中計數行返回完全相同的數量

如果我只COUNT()payments表,則使用計數是準確的,它只有當我在同一個語句兩個表計數是否COUNT()兩者成爲同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 
+2

使用'COUNT(DISTINCT p.id)'和'COUNT(DISTINCT b.id)' – 2013-04-10 18:12:46

+1

您以「星形」模式加入表格,這是一個未定義的區域。如果其中一個表的匹配記錄比其他表中的匹配記錄多得多,那麼mysql必須通過擴展/複製較小表中的數據來填補漏洞。 – 2013-04-10 18:14:34

回答

2

COUNT()會計算它遇到的每個非NULL值。它不關心值是否明顯。 COUNT(DISTINCT fieldname)計算不同的值。如果要計算唯一值,請使用COUNT DISTINCT。

+0

非常感謝@Tom的工作,並感謝您的解釋。 – Wasim 2013-04-10 18:16:54

相關問題