假设我有一张(大部分)忠实夫妻的桌子。这对夫妇几次出现在同一张桌子上。
你可以看出谁是忠实的,因为杰克总是和黛安在一起,弗雷德总是和金格在一起,等等。
然而,汤姆、迪克和哈里都在和霍马克女士约会。如下所示:
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开始:
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。
这样,忠实的夫妻就会一如既往地表现出只有一个伴侣。
你可以找出破坏家园的人,因为他们有一个以上的搭档。
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一定有一些事情我真的不明白,因为我一直在盲目地尝试每一个组合,选择,区分,分组,汇总,计数等等。
发布于 2012-02-10 23:21:32
你为什么认为只有Y才能有几个约会伙伴而Xs不能呢?:)无论如何,快速(不是查询的执行时间,而是思考问题的时间)查询(不是我上面说过的最好的查询):
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发布于 2012-02-11 00:55:13
这个查询应该能完成以下任务:
SELECT y, COUNT(DISTINCT x) AS partners
FROM couples
GROUP BY y
HAVING partners > 1它将计算每个Y的不同值,然后只返回有多个合作伙伴的Y。
如果还想检查Xs,请考虑使用具有x和y互换性的UNION SELECT (如果两列同时不出现值,则无法确定具有该值的X或Y是否有多个合作伙伴):
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 > 1https://stackoverflow.com/questions/9235729
复制相似问题