본문 바로가기
SQL 문제 풀기/1. 프로그래머스 SQL : 2023.12.17~2024.2.29

<프로그래머스 28> 동명 동물 수 찾기(Lv.2)

by HYEHYE_SON 2024. 1. 13.
728x90

 

프로그래머스에서 제공하는 SQL문제 매일 풀기 챌린지


문제 설명 

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다.
ANIMAL_INS 테이블 구조는 다음과 같으며,
ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는
각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다.

 

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

예시

예를 들어 ANIMAL_INS 테이블이 다음과 같다면
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번 쓰였습니다.

 

 

따라서 SQL문을 실행하면 다음과 같이 나와야 합니다.

 

NAME COUNT
Lucy 3
Raven 2

 

 

본 문제는 Kaggle의 "Austin Animal Center Shelter Intakes and Outcomes"에서 제공하는 데이터를 사용하였으며 ODbL의 적용을 받습니다.


정답

select name, count(name) as count
    from animal_ins
    group by name
    having count(name) >= 2
    order by name asc;

 

해설하기

# 1. SELECT 절
출력할 컬럼명을 나열하는데,
이름의 사용 횟수를 구해야 하고 이름이 없는 동물 
즉, 이름이 NULL인 동물은 집계에서 제외하여야 하므로

COUNT()의 괄호 안에 ASTERISK(*)를 사용하지 않고,
NAME이라는 컬럼명을 넣어준다
(왜? ASTERISK는 NULL값을 포함하여 행의 수를 세기 때문)


# 2. FROM절
NAME을 가져올 테이블 명을 기입해준다.


# 3. GROUP BY절
이름 별 횟수 를 출력하는 SQL문이기 때문에
이름을 GROUP 으로 묶어야 
이름 별 횟수를 출력할 수 있다.


# 4. HAVING절
그룹함수에 대한 조건을 사용하려면
HAVING절에서 사용해줘야한다. 

따라서 HAVING절에서 
동물 이름 중 두 번 이상 쓰인 이름이라는 조건을 작성해준다.
이때, SELECT문과 같이 NULL값은 세지 않기 위해서
COUNT(NAME)을 해준다.


# 5. ORDER BY절
이름을 기준으로 ASC정렬이기 때문에
NAME ASC를 기입해준다.

 

결과 출력

 

 

 

출처 : 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges

반응형