mysql - 2 在带有 LEFT JOIN 的 SELECT 中进行 COUNT

标签 mysql select sum left-join

我有 2 张 table :

用户:

ID | NAME 
1  | caio 
2  | mike
3  | peter

发送:

ID | ID_SEND | ID_RECEIVE
1  |    1    |     2
2  |    2    |     3
3  |    3    |     2
4  |    2    |     1

每次用户向另一个用户发送卡片(通过电子邮件发送)时,都会将其添加到表中。

问题:我想编写一个 SELECT 来了解用户进入 ID_SEND 的次数以及用户被访问的次数在ID_RECEIVE中。我尝试过这样的事情:

SELECT 
    user.email, 
    COUNT(sends.id_receive) AS numberReceive, 
    COUNT(sends.id_send) AS numberSend
FROM
    user
LEFT JOIN 
    sends ON user.id = sends.id_send OR user.id = sends.id_receive
GROUP BY 
    user.email

问题是 ID_SENDID_RECEIVE 返回相同的值,即两者的总和......我哪里出错了?

最佳答案

LEFT JOIN两次,一次用于发送,一次用于接收

SELECT u.email,
       COUNT(r.id_receive) AS numberReceive,
       COUNT(s.id_send) AS numberSend
FROM user u
LEFT JOIN sends r ON u.id = r.id_receive
LEFT JOIN sends s ON u.id = s.id_send
GROUP BY u.email

或者,单个LEFT JOIN,使用 case 表达式进行条件计数:

SELECT u.email,
       SUM(case when u.id = s.id_receive then 1 else 0 end) AS numberReceive,
       SUM(case when u.id = s.id_send then 1 else 0 end) AS numberSend
FROM user u
LEFT JOIN sends s ON u.id IN (s.id_receive, s.id_send) 
GROUP BY u.email

关于mysql - 2 在带有 LEFT JOIN 的 SELECT 中进行 COUNT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35901906/

相关文章:

mysql - 拆分一列数据

php - Laravel 按多态表上的列排序结果

mysql - 在 php 5.3 中使用旧的 MYSQL 密码

c - 为什么我的 C 程序无法运行并给出未使用的变量错误?

列表中的 Python 运行总和

mysql - MySQL 中的 Python 变量

mysql - SQL选择与给定列的多个单词匹配的记录

php - CakePHP 表单选择值作为 table.id,选择选项文本作为 table.textfield

c# - 使用递归查找二维数组第一行和最后一行中所有值的总和

php - 使用更新查询复制列数据