CODING TEST/MySQL
Lv2 - 동명 동물 수 찾기
iamyuunzo
2025. 7. 19. 22:27
📌 문제 정보
- 문제 이름 : 프로그래머스 - (GROUP BY) 동명 동물 수 찾기
- 문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/59041
📌 문제 요약
- ANIMAL_INS 테이블 : ANIMAL_ID(동물의 아이디), ANIMAL_TYPE(생물 종), DATETIME(보호 시작일), INTAKE_CONDITION(보호 시작 시 상태), NAME(이름), SEX_UPON_INTAKE(성별 및 중성화 여부)
- 동물 보호소에 들어온 동물 이름 중 두 번 이상 쓰인 이름과 해당 이름이 쓰인 횟수를 조회하는 SQL문을 작성해주세요. 이때 결과는 이름이 없는 동물은 집계에서 제외하며, 결과는 이름 순으로 조회해주세요.
예시)
| ANIMAL_ID | ANIMAL_TYPE | DATETIME | INTAKE_CONDITION | NAME | SEX_UPON_INTAKE |
| A396810 | Dog | 2016-08-22 16:13:00 | Injured | Raven | Spayed Female |
| A377750 | Dog | 2017-10-25 17:17:00 | Normal | Lucy | Spayed Female |
| A355688 | Dog | 2014-01-26 13:48:00 | Normal | Shadow | Neutered Male |
| A399421 | Dog | 2015-08-25 14:08:00 | Normal | Lucy | Spayed Female |
| A400680 | Dog | 2017-06-17 13:29:00 | Normal | Lucy | Spayed Female |
| A410668 | Cat | 2015-11-19 13:41:00 | Normal | Raven | Spayed Female |
- Raven 2번, Lucy 3번, Shadow 1
출력)
| NAME | COUNT |
| Lucy | 3 |
| Raven | 2 |
📌 내 풀이 및 코드
SELECT NAME, COUNT(*) AS COUNT
FROM ANIMAL_INS
WHERE NAME IS NOT NULL
GROUP BY NAME
HAVING COUNT(*) >= 2
ORDER BY NAME;
- GROUP BY, HAVING 문법 까먹었음.. 두 문단 빼고는 똑같이 적었으나 핵심 2개를 틀림.
- 이름이 같은 동물들끼리 그룹으루 묶어야 함. -> 그래야 몇 번 나왔는지 셀 수 있으니까.
- HAVING으로 두 번 이상 나온 이름만 골라야 함. (GROUP BY 후 조건을 줄 때 사용)
📌 새로 배운 문법
<-- 이번 문제에서 새로 배운 Java 문법 정리 -->
** GROUP BY **
- 같은 값을 가진 행들을 묶음.
** HAVING 절 **
- 그룹핑한 결과에 조건을 걸 때 사용 (WHERE이 행에 조건을, HAVING이 그룹에 조건을 건다고 보면 됨.)
SELECT 그룹기준, COUNT(*) AS 개수 -- 컬럼, 집계함수
FROM 테이블
WHERE ... -- 그룹 전 조건
GROUP BY 그룹기준컬럼
HAVING 조건 -- 그룹 후 조건
ORDER BY ...;