HAVING절

HONG LEE ·2024년 4월 16일
0
post-thumbnail

SQL코딩테스트를 하다가 드디어 막히는 부분이 생겼다.
문제는 이러했다.

이때 나는 처음에 이러한 코드로 작성을 했다.

SELECT NAME,
       COUNT(NAME) 'COUNT'
FROM ANIMAL_INS
WHERE NAME<>'NULL' AND COUNT(NAME)>1
GROUP BY NAME
ORDER BY NAME

하지만 계속 틀렸다고 나오는 것이다.. 뭐가 잘못되었는지 도무지 알지 못하여 나의 선생님 CHATGPT4 께 여쭈어보았다.

CHATGPT4 선생님께서는 HAVING절이라는 것을 통해 한번에 해결하셨다..
답은 아래와 같다.

SELECT NAME,
       COUNT(NAME) 'COUNT'
FROM ANIMAL_INS
WHERE NAME <> 'NULL'
GROUP BY NAME 
HAVING COUNT(NAME)>1 
ORDER BY NAME

나는 아직 HAVING절을 배워본 적이 없기 때문에 HAVING과 WHERE절에 대한 차이가 궁금했다.
물어본 결과 선생님의 대답은 이러했다.

쉽게 이야기해
WHERE절은 그룹화되기 전에 적용되고
HAVING절은 그룹화된 후 적용된다.
그래서 HAVING절은 GROUP BY 절 이후에 위치한다. 그룹화된 결과에 대해 집계 함수를 포함한 조건을 지정하는데 사용된다.

결국 테스트에서 결과로 원했던 것은 동물 이름 집단에서 2개 이상의 이름 집단을 원했기에, 그룹화된 결과에 대한 조건임으로 'HAVING'절이 필요했던 것이다.

이제는 어느정도 HAVING절을 이해할 수 있게 된 것같다😄

0개의 댓글