首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过计算*每一组每一小部分找到家庭破坏者?

如何通过计算*每一组每一小部分找到家庭破坏者?
EN

Stack Overflow用户
提问于 2012-02-10 22:31:18
回答 2查看 127关注 0票数 3

假设我有一张(大部分)忠实夫妻的桌子。这对夫妇几次出现在同一张桌子上。

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

然而,汤姆、迪克和哈里都在和霍马克女士约会。如下所示:

代码语言:javascript
复制
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

我可以从GROUPing栏Y开始:

代码语言:javascript
复制
select X, Y from couples group by Y

产生的结果:

代码语言:javascript
复制
X           Y
Fred        Ginger
Jack        Dianne
Tom         Homewrecker
Dick        Homewrecker
Harry       Homewrecker
Bogie       Bacall
Heathcliff  Catherine
Adam        Steve

然而,我想得到第三栏,其中显示了不同的合作伙伴总数的每一个Y。

这样,忠实的夫妻就会一如既往地表现出只有一个伴侣。

你可以找出破坏家园的人,因为他们有一个以上的搭档。

代码语言:javascript
复制
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

一定有一些事情我真的不明白,因为我一直在盲目地尝试每一个组合,选择,区分,分组,汇总,计数等等。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-10 23:21:32

你为什么认为只有Y才能有几个约会伙伴而Xs不能呢?:)无论如何,快速(不是查询的执行时间,而是思考问题的时间)查询(不是我上面说过的最好的查询):

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2012-02-11 00:55:13

这个查询应该能完成以下任务:

代码语言:javascript
复制
SELECT y, COUNT(DISTINCT x) AS partners 
FROM couples 
GROUP BY y 
HAVING partners > 1

它将计算每个Y的不同值,然后只返回有多个合作伙伴的Y。

如果还想检查Xs,请考虑使用具有x和y互换性的UNION SELECT (如果两列同时不出现值,则无法确定具有该值的X或Y是否有多个合作伙伴):

代码语言:javascript
复制
SELECT y, COUNT(DISTINCT x) AS partners 
FROM couples 
GROUP BY y 
HAVING partners > 1 
UNION SELECT x, COUNT(DISTINCT y) AS partners 
FROM couples 
GROUP BY x 
HAVING partners > 1
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9235729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档