首页 > 解决方案 > 如何计算mysql中两列中唯一对的数量

问题描述

我有一个简单的 MySQL 表,其中包含作者、收件人和消息列。

作者和收件人都是用户。

Bob 可以写信给 Alice,Alice 可以回写,结果是

作者 接受者 信息
鲍勃 爱丽丝 嗨,爱丽丝
爱丽丝 鲍勃 你好,鲍勃
鲍勃 爱丽丝 你好吗,爱丽丝?

我需要得到的结果是

一对 数数
鲍勃,爱丽丝 3

但我不断得到

一对 数数
鲍勃,爱丽丝 2
爱丽丝,鲍勃 1

我尝试使用名称的 CONCAT 作为键,但我无法得到正确的结果。我一直遇到这个结果:

一对 数数
鲍勃,爱丽丝 3
爱丽丝,鲍勃 3

我尝试了联合、连接、子查询以及它们的大量组合,但我无法在没有重复的情况下获得干净的结果,我担心我在兔子洞里很深,无法看到一个简单的解决方案。

名称的顺序并不重要,但如果它们按字母顺序排列,那将是一个不错的奖励。

你有什么想法?

标签: mysql

解决方案


您可以使用函数LEAST()GREATEST()创建唯一对:

SELECT CONCAT(LEAST(author, recipient), ',', GREATEST(author, recipient)) pair, 
       COUNT(*) count
FROM tablename
GROUP BY pair

请参阅演示
结果:

一对 数数
爱丽丝,鲍勃 3

推荐阅读