2014-12-02 7 views
0

HAVING 절 및 COUNT 함수를 다시 작성하는 방법을 개념적으로 이해하려고합니다.HAVING 절 및 COUNT 함수 다시 쓰기

나는 "(COUNT없이 HAVING 사용하거나 사용하지 않고 쿼리를 작성하려고 여분의 도전으로.) 세 개 이상의 등급을 공헌 한 모든 검토의 이름을 찾아라."와 관련이 간단한 데이터베이스 질문을 받았다 : http://sqlfiddle.com/#!5/35779/2/0

HAVING 및 COUNT를 사용하는 쿼리는 쉽습니다. 없이는 어려움을 겪고 있습니다.

도움을 주시면 대단히 감사하겠습니다. 고맙습니다.

+1

링크가 아닌 샘플 데이터를 포함하면 도움이 될 것입니다. sqlfiddle.com 지금까지 시도한 것을 보여주는 것이 좋을 것이므로 어떤 데이터베이스를 작업하고 있는지 나타내야합니다 함께 솔루션을 제공 할 수 있습니다. –

+0

감사합니다. 이게 효과가 있니? http://sqlfiddle.com/#!5/35779/2/0 – Edward

답변

2

하나의 옵션은 하위 쿼리에 COUNT 대신에 SUM(1)을 사용할 수 있으며, WHERE 대신 HAVING 사용하는 것이 다음을 추가 :

SELECT b.name 
FROM (SELECT rID,SUM(1) Sum1 
     FROM rating 
     GROUP BY rID 
    )a 
JOIN reviewer b 
    ON a.rID = b.rID 
WHERE Sum1 >= 3 

데모 : SQL Fiddle

업데이트 : SUM(1)의 일부 설명 상수를 SELECT 문으로 변경하면 반환되는 모든 행에 대해 해당 값이 반복됩니다. 예 :

SELECT rID 
     ,1 as Col1 
FROM rating 

결과 :

| rID | Col1 | 
|-----|------| 
| 201 | 1 | 
| 201 | 1 | 
| 202 | 1 | 
| 203 | 1 | 
| 203 | 1 | 
...... 

SUM(1)

는 모든 행에 일정한 1을 적용하고 집계된다.

+0

SUM (1)의 합계를 설명해 주시겠습니까? – Edward

+0

모든 행에 대해 '1'만 채워진 열을 생각해 보면, 1을 모두 합하면 'COUNT'를 사용하지 않고'COUNT'와 동일한 결과를 얻을 수 있습니다. 실제로 할 일이 아니지만 'COUNT'를 피하는 요구 사항을 충족시킵니다. –