0

我正在使用以下 SQL 语句来处理COUNT()来自两个不同表的行。唯一的问题是payment_countandupload_count结果总是返回相同的值。

如果我只COUNT()payments表中计数,那么计数是准确的,只有当我在同一语句中从两个表中计数时,两者的COUNT()for 才会变得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 fieldname) 计算不同的值。如果要计算唯一值,请使用 COUNT DISTINCT。

于 2013-04-10T18:14:04.203 回答