【发布时间】:2015-05-05 09:34:58
【问题描述】:
假设我有两个表:
Users
id: integer
name: string
Messages
id: integer
sender_id: integer
receiver_id: integer
body: string
我需要获取所有用户发送和接收消息的统计信息。
对于已发送的消息,我的查询按预期工作:
SELECT users.id, COUNT(*) total_sent
FROM users
LEFT OUTER JOIN messages sent_messages ON sent_messages.sender_id = users.id
GROUP BY users.id;
+----+------------+
| id | total_sent |
+----+------------+
| 1 | 3 |
| 2 | 2 |
| 3 | 1 |
+----+------------+
但是我需要扩展查询并同时获取收到的消息数。我的尝试是:
SELECT users.id, COUNT(sent_messages.id) total_sent, COUNT(received_messages.id) total_received
FROM users
LEFT OUTER JOIN messages sent_messages ON sent_messages.sender_id = users.id
LEFT OUTER JOIN messages received_messages ON received_messages.receiver_id = users.id
GROUP BY users.id;
不幸的是,它会产生错误的结果。
【问题讨论】:
-
如果您愿意,请考虑遵循以下简单的两步操作: 1. 如果您还没有这样做,请提供适当的 DDL(和/或 sqlfiddle),以便我们可以更轻松地复制问题。 2. 如果您尚未这样做,请提供与步骤 1 中提供的信息相对应的所需结果集。
-
试试 COUNT(distinct sent_messages.id) 和 COUNT(distinct received_messages.id)。
-
@jarlh - 它完成了工作:) 谢谢!