Skip to main content

[SQL] 59040 고양이와 개는 몇 마리 있을까

https://school.programmers.co.kr/learn/courses/30/lessons/59040

image.png

image.png

📌문제

  1. 고양이와 개의 마릿수 세기
  2. 고양이 먼저, 그 다음 개 나오게 정렬

💡 정답쿼리

SELECT ANIMAL_TYPE, COUNT(*)AS count
FROM animal_ins
WHERE animal_type IN ('Cat', 'Dog')
GROUP BY animal_type
ORDER BY FIELD(animal_type, 'Cat', 'Dog');
  1. WHERE ANIMAL_TYPE IN ('Cat', 'Dog')
    → 고양이와 개만 필터링
  2. GROUP BY ANIMAL_TYPE
    → 종류별로 묶어서 마릿수 집계
  3. ORDER BY FIELD(ANIMAL_TYPE, 'Cat', 'Dog')
    → FIELD() 함수로 커스텀 정렬

다른 부분은 어려운 게 없지만, 개와 고양이 순으로 정렬하는 부분이 생소하다.
MySQL에서는 ORDER BY FIELD() 함수로 명시적으로 정렬 우선순위를 지정한다.

FIELD() 함수

  • MySQL에서만 사용 가능
  • ORDER BY 에서만 사용 가능 (정렬 순서 지정용
  • 문자열, 숫자 모두 가능
  • 일반적인 알파벳순/숫자순이 아니라 원하는 순서대로 정렬할 때 유용하다.
ORDER BY FIELD(컬럼명, '값1', '값2', '값3', ...)
  • 값1 → 우선순위 1
  • 값2 → 우선순위 2
  • 값3 → 우선순위 3
  • 목록에 없는 값 → 0 (가장 먼저 또는 가장 나중 depending on ASC/DESC)

다른 DBMS(Oracle, PostgreSQL 등)에서는 아래와 같이 CASE WHEN 을 쓴다.

ORDER BY CASE ANIMAL_TYPE 
    WHEN 'Cat' THEN 1
    WHEN 'Dog' THEN 2
 END