我有 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_SEND
和 ID_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/