mysql - 如何通过按小节计算*每个*组来找到家庭破坏者?

标签 mysql count group-by each

假设我有一张(大部分)忠实夫妻的表格。这对夫妇多次出现在同一张 table 上。

你可以看出谁是忠实的,因为 jack 总是和黛安在一起,弗雷德总是和金杰在一起,等等。

但是,汤姆、迪克和哈利都在和毁家小姐约会。像这样:

Fred        Ginger
Fred        Ginger
Fred        Ginger
Jack        Dianne
Jack        Dianne
Tom         Homewrecker
Dick        Homewrecker
Harry       Homewrecker
Bogie       Bacall
Heathcliff  Catherine
Heathcliff  Catherine
Heathcliff  Catherine
Heathcliff  Catherine
Adam        Steve
Adam        Steve

我可以从 Y 列 GROUPing 开始:

select X, Y from couples group by Y

产生:

X           Y
Fred        Ginger
Jack        Dianne
Tom         Homewrecker
Dick        Homewrecker
Harry       Homewrecker
Bogie       Bacall
Heathcliff  Catherine
Adam        Steve

但是,我想获得第三列,显示每个 Y 拥有的不同合作伙伴的总数。

这样一来,忠诚的夫妻就会表现得一如既往只有一个伴侣。

您可以发现家庭破坏者,因为他们有 > 1 个伙伴。

X            Y           Count  
Fred        Ginger         1    
Jack        Dianne         1    
Tom         Homewrecker    3 <--- THERE'S the b***h!!!
Dick        Homewrecker    3 <--- THERE'S the b***h!!!
Harry       Homewrecker    3 <--- THERE'S the b***h!!!
Bogie       Bacall         1    
Heathcliff  Catherine      1
Adam        Steve          1

肯定有一些我真的不明白的地方,因为我一直在尝试 SELECT、DISTINCT、GROUP BY、ROLLUP、COUNT 等等的每一种组合,直到失明。

最佳答案

为什么您认为只有 Y 可以有几个约会对象而 X 不能? :)) 无论如何,快速(不是查询的执行时间,而是思考问题的时间))查询(不是我上面所说的最好的查询):

SELECT DISTINCT t.X, t.Y, ttt.cnt FROM 
          couples t, 
          (SELECT Y, COUNT(*) cnt FROM 
                  (SELECT DISTINCT X, Y FROM couples) tt GROUP BY Y) ttt 
       WHERE t.Y=ttt.Y

关于mysql - 如何通过按小节计算*每个*组来找到家庭破坏者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9235729/

相关文章:

Python - 根据列的最大值删除重复项

mysql - COUNT 组的 mysql 总数

python - 根据重复提取一定数量的行?

android - 如何使用多个 AsyncTask 同步应用程序

php - 206.2 kB(加载 204.8 kB)在 LONGBLOB 值中前置

php - 错误 :NO database is selected

mysql - 当我尝试显示一列的计数值时,它会计算编号。存储在同一个表的同一行的单个单元格中的数组的数量

MYSQL 查询总和

MYSQL 按计数排序

powershell - 计算文本文件中 ip 列表的出现次数