MySQL 左连接与多个计数

标签 mysql select

我有这3张 table

users [ id , username, password ]
logs [ id, user_id, action ]
user_propeties [ id, user_id, prop_name, prop_value ]

我想仅根据用户 ID 从 2 个表中选择具有 Count(logs.id) 和 count(user_propeties.id) 的所有用户列,其中 prop_value 为 NULL

我有以下查询

SELECT t1.*, count(t2.`id`) as total_logs,count(t3.`id`) as total_propeties
                       FROM `users` t1
                       LEFT JOIN `user_propeties` t2
                                ON t1.`id` = t2.`user_id` AND ISNULL(t2.`prop_value`)
                       LEFT JOIN `logs` t3
                                ON t3.`user_id` = t1.`id`                                       
                       GROUP BY t1.id
                       ORDER BY t1.id DESC

返回行,但计数值错误。我做错了什么?谢谢

最佳答案

我怀疑您需要一些DISTINCT,否则它将返回日志和属性的所有组合的计数;

SELECT t1.*, COUNT(DISTINCT t2.`id`) as total_logs,
             COUNT(DISTINCT t3.`id`) as total_propeties
FROM `users` t1
LEFT JOIN `user_propeties` t2
         ON t1.`id` = t2.`user_id` AND ISNULL(t2.`prop_value`)
LEFT JOIN `logs` t3
         ON t3.`user_id` = t1.`id`                                       
GROUP BY t1.id
ORDER BY t1.id DESC

关于MySQL 左连接与多个计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23875649/

相关文章:

python - 与 Python 保持在同一个 Shell session 中

mysql - 无法在express.js中获取请求的API

MySQL查询单词链接

mysql - 更新mysql root用户密码?

c# - 如何在此查询中嵌套 Select?

mysql - 如何查找具有相似字符串(正则表达式)的记录?

mysql - 合并 SQL 中同一列的行

php - 是否可以将变量值添加到选择查询结果 php pdo

php - 从 MySql 返回小于 60 天的行

javascript - 如何使用多个 bootstrap-select 显示所有选定的选项?