表消息(从一个用户到另一个用户的日志消息示例):
| id | from_user_id | to_user_id | message_body |
| 1 | 7 | 10 | ... |
| 2 | 3 | 1 | ... |
| 3 | 95 | 14 | ... |
| 4 | 95 | 3 | ... |
| 5 | 1 | 3 | ... |
| 6 | 1 | 3 | ... |
| 7 | 10 | 7 | ... |
| 8 | 3 | 95 | ... |
...
我想COUNT(或执行任何其他聚合函数)有多少用户' 对话我在此表中。 对话被定义为消息 从A到B 或从B到A 。请注意,订单并不算作 ids彼此可以互换。
所以,我想得到的结果是:
表格对话:
| id | user_id_1 | user_id_2 | messages_count |
| 1 | 7 | 10 | 2 |
| 2 | 3 | 1 | 3 |
| 3 | 95 | 14 | 1 |
| 4 | 95 | 3 | 2 |
...
我如何使用SQL查询执行此操作?
答案 0 :(得分:3)
一种选择是使用least
和greatest
:
select least(from_user_id, to_user_id) user_id_1,
greatest(from_user_id, to_user_id) user_id_2,
count(*)
from messages
group by 1, 2
答案 1 :(得分:0)
label