MySQL 对多个表中的行进行计数,返回完全相同的数量

标签 mysql sql

我使用以下 SQL 语句来获取两个不同表中的 COUNT() 行。唯一的问题是 payment_count upload_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

最佳答案

COUNT() 将计算它遇到的每个非 NULL 值。它不关心该值是否不同。 COUNT(DISTINCT fieldname) 对不同值进行计数。如果您想计算唯一值,请使用 COUNT DISTINCT。

关于MySQL 对多个表中的行进行计数,返回完全相同的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15933227/

相关文章:

php - SQL记录检索

sql - 插入查询后的行数和选择查询的行数

sql - 帮助编写需求查询的方法

sql - sql server全文索引什么时候更新?

mysql - LIMIT x, y 是否绝对等同于 MySQL 中的 OFFSET x LIMIT y?

php - 如何在mysql中的一个表中显示2个不同的数据(两个条件)

php - 多个管理员的 Codeigniter 角色

mysql - MySQL "GROUP BY NULL"是做什么的?

mysql - 'create_date' 时间戳字段的默认值无效

sql - 简单的sqlite查询,升序排列