[프로그래머스] 고양이와 개는 몇 마리 있을까

yannie·2024년 9월 9일
0

[문제]

동물 보호소에 들어온 동물 중 고양이와 개가 각각 몇 마리인지 조회하는 SQL문을 작성해주세요. 이때 고양이를 개보다 먼저 조회해주세요.

[틀린 풀이]

SELECT
    ANIMAL_TYPE,
    count(CASE WHEN ANIMAL_TYPE = 'Dog' THEN 1 END),
    count(CASE WHEN ANIMAL_TYPE = 'Cat' THEN 1 END)
FROM ANIMAL_INS
GROUP BY ANIMAL_TYPE
;


이 쿼리는 ANIMAL_TYPE을 기준으로 그룹화한 후, 각각 개와 고양이에 대한 조건을 CASE WHEN을 사용해 두 개의 컬럼으로 나누어 COUNT하려고 했다. 그러나 이 방식은 ANIMAL_TYPE 그룹별로 두 개의 별도 컬럼을 생성하게 되어 의도한 결과와 달랐다.

[맞은 풀이]

SELECT
    ANIMAL_TYPE,
    COUNT(ANIMAL_TYPE) AS COUNT
FROM ANIMAL_INS
GROUP BY ANIMAL_TYPE
ORDER BY ANIMAL_TYPE = 'Cat' DESC
;
  1. GROUP BY ANIMAL_TYPE를 통해 동물 유형별로 그룹화하였다.
  2. COUNT(ANIMAL_TYPE)로 각 동물 유형의 수를 계산한다.
  3. ORDER BY 절에서 고양이를 개보다 먼저 조회하기 위해 ANIMAL_TYPE = 'Cat' DESC 조건을 사용 -> 이로 인해 고양이가 먼저 정렬된다.

잘못 생각한 점은
"그룹화가 되어 있는 컬럼을 다시 2개로 쪼갰다는 점"이다.

  • 이미 ANIMAL_TYPE으로 그룹화(GROUP BY ANIMAL_TYPE)가 되었기 때문에, 개별 그룹에 속한 개수는 COUNT(ANIMAL_TYPE)만으로도 충분히 계산할 수 있었다..
  • 하지만 CASE WHEN을 사용해 ANIMAL_TYPE을 다시 'Dog'와 'Cat'으로 나누어 두 개의 COUNT를 하려고 했다. 이 방식은 결과적으로 하나의 그룹을 다시 두 개의 컬럼으로 나누게 되어 의도와는 다른 출력이 나온 것!
    즉, 한번 그룹화된 데이터를 다시 조건으로 나누어 집계할 필요가 없었다는 점이 잘못된 부분입니다.

0개의 댓글