2012-02-12 2 views
1

그래서 나는 바가 있고 맥주 데이터베이스가있는 SQL 문제에 대해 작업하고 있습니다. 마이크가 좋아하는 맥주를 제공하는 모든 바를 나열하고 한 명 이상의 술꾼이 자주 방문합니다. 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

데이터베이스, 포함. 특정 버전의 pls - 다른 사람들이 지원하지 않는 일부 기능. –

+0

_ "** 한 술꾼 이상으로 자주 방문하는 사람이 많습니다."_ <>> (술꾼)> 2' – gdoron

+0

테이블 정의에서 빈발하는 사람 (술꾼, 술집)은 빈번해야한다고 생각합니다 (술꾼, 술집) – Appleman1234

답변

2

바 부질의에 GROUP BY bar이 필요합니다.

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

+0

@gdoron 예,'> = 2' (으)로 변경되었습니다. –

2

당신은 당신의 집계 COUNT가 작동하려면 'BY GROUP'을 수행해야합니다 : 그렇지 않으면, 당신은 효과적으로 당신이 원하는하지 않은, 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) > 1 
    ) 
1

"하는 하나가 술꾼보다 자주 방문합니다. " <>HAVING COUNT(drinker) > 2 (1)

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) 
관련 문제