Mysql 使用 OR 按 2 列分组

Mysql group by 2 columns using OR

我有 table 条代表对话的消息:

| sender     | bigint(20) unsigned | NO   | MUL | NULL    |       |
| recipient  | bigint(20) unsigned | NO   | MUL | NULL    |       |
| text       | text                | NO   |     | NULL    |       |

每一行都有发件人、收件人和邮件正文。

我想运行查询returns所有对话以及每个对话中的消息数。

因此,如果数据如下所示:

1,2,Hello
2,1,Bye
1,3,Hi

我想知道1和2的对话有2条消息,1和3的对话有1条消息

所以我需要做类似

的事情
SELECT count(*), SET OF(sender, recipient) from messages group by ( sender OR recipient )

但显然,那是行不通的。有什么类似的我可以做吗

您可以重新排列配对,方法是先选择 (sender, recipient) 的最小值,然后选择 (sender, recipient) 的最大值,然后按这些值分组以获得每对的计数。试试这个:

SELECT LEAST(sender, recipient) AS firstPerson, GREATEST(sender, recipient) AS secondPerson, COUNT(*) AS numMessages
FROM myTable
GROUP BY LEAST(sender, recipient), GREATEST(sender, recipient);
SELECT sender_reciever,COUNT(*) AS message_count
    FROM
    (SELECT (IF(sender>recipient,CONCAT(sender,'_',recipient),CONCAT(recipient,'_',sender))) AS sender_reciever
    FROM
    message_table) T
    GROUP BY sender_reciever

希望对您有所帮助