2010-12-30 7 views
0

두 개의 테이블이 있습니다 : "도시"및 "제출".SQL : 최소 행 수가 충족되는 경우에만 선택하십시오.

최소한 n 개의 제출물이있는 도시 목록을 선택하고 싶습니다. 이 문제를 해결하는 가장 좋은 방법은 무엇입니까? 또한 대부분의 도시에는 N 개의 제출물이 없을 것입니다.

모든 도시를 선택한 다음 제출에 대해 COUNT (*) 쿼리를 수행하여 목록을 다시 채우려고했지만 매우 비효율적 인 솔루션입니다. 어떤 도움을 주셔서 감사합니다.

+0

당신이 COUNT'이 비효율적이다 '라고 생각 이유는 무엇입니까? GROUP BY Cities.Id'와 'COUNT (*)> n'을 가진 "도시"와 "제출물"의 참여가이 문제에 접근하는 가장 좋은 방법 인 것 같습니다. –

+1

@Martin : 나는 * 상관 관계가있는 하위 쿼리를 사용하여 속도가 너무 느릴 것이라고 제안합니다. 즉, '제출처 WHERE CITY.ID = Submissions.CityId> n'에서 COUNT (*)를 선택하십시오. –

+0

올바른 것으로 표시하십시오. 나는 약 500 개의 도시를 가지고 있는데 이는 500 + 1 개의 쿼리가 될 것임을 의미합니다. –

답변

3

이 시도 :

SELECT Cities.id 
FROM Cities 
JOIN Submissions ON Cities.id = Submissions.CityId 
GROUP BY Cities.id 
HAVING COUNT(*) >= n 
3
select cityname, count(submissionid) as submissioncount 
    from cities inner join submissions 
    on submissions.cityid = cities.cityid 
    group by cityname 
    having count(submissionid) >= {yourdesiredcount} 
+0

물론 하나 이상의 상태에서 "스프링 필드"와 같은 공통 이름을 사용하는 경우 cityname을 기준으로 그룹화하는 것은 충분하지 않습니다. 그런 다음 cityid, cityname별로 그룹화해야합니다. – Tim

관련 문제