mysql - MYSQL中的Join(从一张表开始计数,从一张表开始列出)

标签 mysql database

我有两张 table ,

  • 用户
  • 举报用户

在用户表中有以下列,

userid , email , phone_number

在报告用户表中有以下列,

id , userid , report_user_id , reason

因此,我想获取具有报告计数的用户列表,如果计数为零,则它必须为零。

用户表,

userid | email         | phone_number
1      | abc@gmail.com | 12312312
2      | abcd@gmail.com | 112312312
3      | abc3@gmail.com | 112312312

报告用户表,

id     |userid | report_user_id | phone_number
1      | 2     |   3            | 12312312
2      | 3     |   2            | 112312312
3      | 1     |   2            | 112312312

预期输出,

userid | email         | phone_number | report_count
1      | abc@gmail.com | 12312312     | 0
2      | abcd@gmail.com | 112312312   | 2
3      | abc3@gmail.com | 112312312   | 1

此处 userid = 1 的报告计数为零,因此它必须为零(因为在 report_user_id 列中没有 1 的条目),userid = 2 有 2 个报告计数,因此它必须为 2 ,而 userid = 3 有 1 个报告计数所以它一定为零。

我已经尝试过这个查询,但无法获得预期的结果,

SELECT count(LRU.report_user_id) as report_count FROM `lickr_report_user` as LRU LEFT JOIN lickr_users as LU ON LU.userid = LRU.report_user_id GROUP BY LU.userid

最佳答案

我认为您颠倒了连接语句中的用户和报告表:

您还应该在 COUNT 函数中添加一个 IFNULL 将 0 替换为 null。

SELECT LU.userid, 
       LU.email, 
       LU.phone_number, 
       COUNT(IFNULL(LRU.report_user_id),0) as report_count 
FROM lickr_users as LU
LEFT JOIN `lickr_report_user` as LRU ON LU.userid = LRU.report_user_id 
GROUP BY LU.userid, LU.email, LU.phone_number

关于mysql - MYSQL中的Join(从一张表开始计数,从一张表开始列出),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52112274/

相关文章:

php - MySQL-如何知道行的自增id

并非所有列都建立索引时的 MySQL 优化

php - 为什么我使用 LIKE 和 LIMIT 的 PDO 查询不起作用?

python - 为什么我无法安装 Cassandra 驱动程序

Android SharedPreferences 限制?

java - 数据检索 - Oracle 中 CLOB 列的性能

并非所有列的 MySQL DISTINCT

mysql - 是否有理由将数据库事务用于只读 sql 语句?

MySQL删除重复记录但保持最新

java - 字符串在数据库中作为整数发布