2012-02-12 52 views
1

因此,我正在研究一个SQL问题,其中有一个我想要的酒吧和啤酒数据库: 列出了所有服务于Mike喜欢的啤酒的酒吧,以及这是不止一个饮酒者经常光顾的地方。如何按成员数量筛选SQL元组

该数据库包括:

likes (drinker, beer) 
frequents(dinker, bar) 
sells(bar, beer) 

所以,我想:

SELECT bar 
FROM beer.sells 
WHERE beer IN 
(SELECT beer 
FROM beer.likes 
WHERE drinker = 'Mike') AND bar IN 
(SELECT bar FROM beer.frequents HAVING COUNT(drinker) > 1) 

,没有工作......为什么不计数(饮酒)比较工作作为过滤器过滤掉少于2个频繁饮酒的酒吧?

+0

数据库,含。特定版本 - 某些其他支持功能不支持。 – 2012-02-12 03:31:34

+0

_“这是经常光顾** **以上的人。”_ <>'有计数(饮酒)> 2' – gdoron 2012-02-12 03:33:44

+0

我相信餐桌定义中的经常旅行者(饮酒者,酒吧) – Appleman1234 2012-02-12 03:40:50

回答

2

看起来你需要在酒吧子查询中使用GROUP BY bar。否则,你将有效地从beer.frequents得到COUNT(*),这是不是你想要的东西:

SELECT bar 
FROM beer.sells 
WHERE beer IN 
(SELECT beer 
FROM beer.likes 
WHERE drinker = 'Mike') AND bar IN 
(SELECT bar FROM beer.frequents GROUP BY bar HAVING COUNT(drinker) >= 2) 
+0

他被问到1但写了2,你应该修正他的错误,看我的答案。 – gdoron 2012-02-12 03:40:21

+0

@gdoron是的,改为'> = 2' – 2012-02-12 03:41:56

2

你需要 'GROUP BY' 为您汇总COUNT工作:

SELECT bar 
FROM beer.sells 
WHERE beer IN 
    (SELECT beer 
    FROM beer.likes 
    WHERE drinker = 'Mike' 
) 
AND bar IN 
    (SELECT bar 
    FROM beer.frequents 
    GROUP BY bar 
    HAVING COUNT(drinker) > 1 
    ) 
1

“这经常光顾的人超过一个饮酒者。“ <>HAVING COUNT(drinker) > 2()

SELECT bar 
FROM beer.sells 
WHERE beer IN 
(SELECT beer 
FROM beer.likes 
WHERE drinker = 'Mike') 
AND bar IN 
(SELECT bar 
FROM beer.frequents 
GROUP BY bar 
HAVING COUNT(drinker) > 1)