동물 보호소에 들어온 동물 이름 중 두 번 이상 쓰인 이름과 해당 이름이 쓰인 횟수를 조회하는 SQL문을 작성해주세요. 이때 결과는 이름이 없는 동물은 집계에서 제외하며, 결과는 이름 순으로 조회해주세요.
SELECT NAME, COUNT(*) AS 'COUNT'
FROM ANIMAL_INS
GROUP BY NAME
WHERE COUNT(*) >= 2;
WHERE COUNT(*) ≥2 를 빼고 실행시키면 각 이름이 쓰인 횟수가 이름 별로 잘 뜨는데 WHERE문을 적으면 자꾸 오류가 떠서 보니
SELECT NAME, COUNT(*) AS 'COUNT'
FROM ANIMAL_INS
GROUP BY NAME
HAVING COUNT(*) >= 2;
이렇게 WHERE 대신 HAVING을 써야했다!
WHERE이랑 HAVING은 GROUP BY 사용할 때 다르다고 설명 들은 거 같은데 기억이 잘 안 나서 찾아봤다.
HAVING은 GROUP BY 한 결과에 조건을 걸고 싶을 때 사용한다.
WHERE > GROUP BY > HAVING 순서대로 사용해야하는데
SELECT NAME, COUNT(*) AS 'COUNT'
FROM ANIMAL_INS
WHERE NAME IS NOT NULL
GROUP BY NAME
HAVING COUNT(*) >= 2;
위 코드로 작성하면 Lucy 값을 가지는 결과만 출력되지만
SELECT NAME, COUNT(*) AS 'COUNT'
FROM ANIMAL_INS
GROUP BY NAME
WHERE NAME IS NOT NULL
HAVING COUNT(*) >= 2;
이렇게 WHERE을 GROUP BY 뒤에 적으면 오류가 뜬다!
GROUP에 조건문을 걸고싶으면 HAVING을 쓰자~ 😙