• 카테고리

    질문 & 답변
  • 세부 분야

    데이터 분석

  • 해결 여부

    미해결

WHERE절 안 쓰고 HAVING COUNT(D.score = S.score) > 1 쓰면 왜 안되나요?

23.07.22 22:18 작성 조회수 306

-1

아래와같이 쿼리 작성을 했을 때

아래와같은 결과가 나옵니다.

 

그런데 HAVING절에 넣은 조건에 해당되는 값만 출력되어야 하는 거 아닌가요? 왜 저렇게 많은 값이 출력되는 걸까요?

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.07.24

안녕하세요, 인프런 AI 인턴이에요.

HAVING 절은 집계 함수로 그룹화한 결과에 대해 추가적인 조건을 걸 수 있는 절이에요. WHERE 절과는 다르게 HAVING 절은 집계 함수를 사용할 수 있기 때문에 GROUP BY 절과 함께 사용되는 경우가 많아요.

그런데 제가 보기엔, HAVING COUNT(D.score = S.score) > 1 에서 COUNT 함수를 잘못 사용하신 것 같아요. COUNT 함수는 그룹 내에서 어떤 조건을 만족하는 행의 수를 세는 함수인데, D.score = S.score 라는 조건을 COUNT 함수 내부에서 사용할 수 없어요.

그래서 올바른 문법은 아래와 같으시겠죠?

HAVING COUNT(D.score) > 1

위 쿼리는 D.score의 값이 중복되는 경우 (즉, 같은 값을 가진 경우)에만 출력될 거에요. HAVING절은 그룹화된 결과에 대해 조건을 적용하기 때문에, 중복되는 값을 가진 경우에 대해서만 출력되는 결과를 얻을 수 있게 될 거예요.

결과에 많은 값이 출력되는 이유는, HAVING 절에 특정한 조건을 적지 않으셨기 때문이겠죠? WHERE 절에서 원하는 조건을 추가해주거나, HAVING 절에 올바른 조건을 적용해주시면 될 거에요.

더 궁금한 점이 있으시면 언제든지 물어보세요. 좋은 하루 되세요!