[SQL] 59040 고양이와 개는 몇 마리 있을까
https://school.programmers.co.kr/learn/courses/30/lessons/59040
📌문제
- 고양이와 개의 마릿수 세기
- 고양이 먼저, 그 다음 개 나오게 정렬
💡 정답쿼리
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');
- WHERE ANIMAL_TYPE IN ('Cat', 'Dog')
→ 고양이와 개만 필터링 - GROUP BY ANIMAL_TYPE
→ 종류별로 묶어서 마릿수 집계 - 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