
[프로그래머스 SQL] 동명 동물 수 찾기 Lv.2
카테고리: SQL · GROUP BY · HAVING
플랫폼: 프로그래머스
난이도: Level 2
📋 문제 설명
ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다.
NAMETYPENULLABLE
| ANIMAL_ID | VARCHAR(N) | FALSE |
| ANIMAL_TYPE | VARCHAR(N) | FALSE |
| DATETIME | DATETIME | FALSE |
| INTAKE_CONDITION | VARCHAR(N) | FALSE |
| NAME | VARCHAR(N) | TRUE |
| SEX_UPON_INTAKE | VARCHAR(N) | FALSE |
동물 보호소에 들어온 동물 이름 중 두 번 이상 쓰인 이름과 해당 이름이 쓰인 횟수를 조회하는 SQL문을 작성해주세요.
이름이 없는 동물은 집계에서 제외하며, 결과는 이름 순으로 조회해주세요.
예시
입력
ANIMAL_IDANIMAL_TYPEDATETIMENAME
| A396810 | Dog | 2016-08-22 | Raven |
| A377750 | Dog | 2017-10-25 | Lucy |
| A355688 | Dog | 2014-01-26 | Shadow |
| A399421 | Dog | 2015-08-25 | Lucy |
| A400680 | Dog | 2017-06-17 | Lucy |
| A410668 | Cat | 2015-11-19 | Raven |
출력
NAMECOUNT
| Lucy | 3 |
| Raven | 2 |
내 풀이
SELECT
NAME,
COUNT(NAME) AS COUNT
FROM ANIMAL_INS
WHERE NAME IS NOT NULL
GROUP BY NAME
HAVING COUNT(NAME) >= 2
ORDER BY NAME;
공부 포인트
1. HAVING vs WHERE
- WHERE는 그룹화 전에 필터링
- HAVING은 그룹화 후 조건 지정 (집계 조건 필터링)
2. NULL 처리
- GROUP BY나 COUNT할 때, NULL 값은 그룹 이름으로 포함되지만
- 이 문제에서는 WHERE NAME IS NOT NULL로 아예 제외함
추가 팁
- 상위 인기 이름만 보고 싶다면 ORDER BY COUNT DESC LIMIT N 같이 조합 가능
- 대소문자 구분이 민감한 환경이라면 LOWER(NAME) 등을 활용하여 통일 처리할 수 있습니다.
마무리 요약
이번 문제는 GROUP BY, COUNT, HAVING, ORDER BY의 조합을 익힐 수 있는 실무형 SQL 예제다.
특히 중복 조건 필터링(HAVING COUNT >= 2)은 데이터 요약과 통계 분석 시 자주 사용되는 핵심 패턴이므로 꼭 외워야한다.
이상입니다. 혹시나 제가 잘못된 내용을 작성했거나
더 좋은 방법이 있다면 댓글 남겨주세요.
지금까지 이 글을 봐주셔서 감사합니다.
'코딩테스트 > SQL' 카테고리의 다른 글
| [프로그래머스_SQL] Lv.2 진료과별 총 예약 횟수 출력하기 (0) | 2026.03.31 |
|---|---|
| [프로그래머스_SQL] Lv.2 가격이 제일 비싼 식품의 정보 출력하기 (0) | 2026.03.21 |
| [프로그래머스_SQL] Lv.1 조건에 맞는 아이템들의 가격의 총합 구하기 (0) | 2026.03.17 |
| [프로그래머스_SQL] Lv.1 잡은 물고기 중 가장 큰 물고기의 길이 구하기 (0) | 2026.03.16 |