SQL:如何根据可通信列聚合多行?

时间:2016-05-17 13:57:29

标签: mysql sql database sqlite relational-database

表消息(从一个用户到另一个用户的日志消息示例):

| 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查询执行此操作?

2 个答案:

答案 0 :(得分:3)

一种选择是使用leastgreatest

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)