mysql - 如何计算mysql中两列中唯一对的数量
问题描述
我有一个简单的 MySQL 表,其中包含作者、收件人和消息列。
作者和收件人都是用户。
Bob 可以写信给 Alice,Alice 可以回写,结果是
作者 | 接受者 | 信息 |
---|---|---|
鲍勃 | 爱丽丝 | 嗨,爱丽丝 |
爱丽丝 | 鲍勃 | 你好,鲍勃 |
鲍勃 | 爱丽丝 | 你好吗,爱丽丝? |
我需要得到的结果是
一对 | 数数 |
---|---|
鲍勃,爱丽丝 | 3 |
但我不断得到
一对 | 数数 |
---|---|
鲍勃,爱丽丝 | 2 |
爱丽丝,鲍勃 | 1 |
我尝试使用名称的 CONCAT 作为键,但我无法得到正确的结果。我一直遇到这个结果:
一对 | 数数 |
---|---|
鲍勃,爱丽丝 | 3 |
爱丽丝,鲍勃 | 3 |
我尝试了联合、连接、子查询以及它们的大量组合,但我无法在没有重复的情况下获得干净的结果,我担心我在兔子洞里很深,无法看到一个简单的解决方案。
名称的顺序并不重要,但如果它们按字母顺序排列,那将是一个不错的奖励。
你有什么想法?
解决方案
您可以使用函数LEAST()
并GREATEST()
创建唯一对:
SELECT CONCAT(LEAST(author, recipient), ',', GREATEST(author, recipient)) pair,
COUNT(*) count
FROM tablename
GROUP BY pair
请参阅演示。
结果:
一对 | 数数 |
---|---|
爱丽丝,鲍勃 | 3 |
推荐阅读
- javascript - 覆盖使用 Object.defineProperty 创建的 getter/setter
- java - 使用空格识别并选择 JComboBox 中的名称
- oracle - 将百万记录从 oracle 复制到另一个 oracle
- python - 关闭窗口的表单 qgis
- css - Opera 用户代理样式表覆盖输入样式的 css
- ajax - ajax get 调用看不到 Python 脚本
- javascript - 所有可能的数组组合算法(匈牙利,蛮力)
- python - Python 的 _winapi 模块
- c# - WPF 按钮字体真棒
- java - 使用 Net Beans 创建 JAR 文件,包括所有依赖的库和文件夹