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 ...;