NullNull

프로그래머스 SQL 동명 동물 수 찾기 본문

SQL

프로그래머스 SQL 동명 동물 수 찾기

KYBee 2022. 2. 28. 20:41

Data 구조

ANIMAL_INS : 동물 보호소에 들어온 동물의 정보를 담은 테이블

NAME TYPE NULLABLE
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문을 작성해주세요. 이때 결과는 이름이 없는 동물은 집계에서 제외하며, 결과는 이름 순으로 조회해주세요.

 

예시

Input: 

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

Output: 

NAME COUNT
Lucy 3
Raven 2

 

정답: 

문제에 주어진 조건을 나열해보면 다음과 같습니다.

1. 이름이 두 번 이상 쓰인 동물

2. 이름이 없는 동물은 집계에서 제외

3. 결과는 이름 순

 

'이름'이 두번 이상 쓰인 동물을 조회하기 위해서 우선 주어진 데이터를 이름으로 그룹화 해야 합니다. 이때 GROUP_BY와 COUNT 함수가 사용됩니다. 이후에 이름이 없는 동물은 집계에서 제외해야 하므로 WHERE 절에 IS NOT NULL 조건을 추가합니다. 이름으로 그룹화 한 결과 중 이름이 두 번 이상 쓰인 동물만 결과로 조회되야 하므로 HAVING절을 추가한 뒤에 COUNT가 1보다 큰 데이터만 표시합니다. 마지막으로 이름순 정렬을 위해 ORDER_BY 함수를 사용합니다.

SELECT NAME, COUNT(*) COUNT FROM ANIMAL_INS
WHERE NAME IS NOT NULL
GROUP BY NAME
HAVING COUNT(*) > 1
ORDER BY NAME

 

Comments