본문 바로가기
Developer/Algorithm

Programmers 프로그래머스 코딩테스트 연습 - 중복 제거하기 (MYSQL)

by 김씩씩 2020. 9. 22.

Programmers 프로그래머스 코딩테스트 연습 - 중복 제거하기 (MYSQL)

 

문제 설명

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 문을 작성해주세요. 이때 이름이 NULL인 경우는 집계하지 않으며 중복되는 이름은 하나로 칩니다.

 

예시

예를 들어 ANIMAL_INS 테이블이 다음과 같다면

ANIMAL_ID ANIMAL_TYPE DATETIME INTAKE_CONDITION NAME SEX_UPON_INTAKE
A562649 Dog 2014-03-20 18:06:00 Sick NULL Spayed Female
A412626 Dog 2016-03-13 11:17:00 Normal *Sam Neutered Male
A563492 Dog 2014-10-24 14:45:00 Normal *Sam Neutered Male
A513956 Dog 2017-06-14 11:54:00 Normal *Sweetie Spayed Female

보호소에 들어온 동물의 이름은 NULL(없음), *Sam, *Sam, *Sweetie입니다. 이 중 NULL과 중복되는 이름을 고려하면, 보호소에 들어온 동물 이름의 수는 2입니다. 따라서 SQL문을 실행하면 다음과 같이 나와야 합니다.

count
2

※ 컬럼 이름(위 예제에서는 count)은 일치하지 않아도 됩니다.

 

 

작성한 답

solution.sql

SELECT COUNT(DISTINCT NAME) FROM ANIMAL_INS WHERE NAME IS NOT NULL;

 

설명

동물 보호소에 들어온 동물의 이름은 몇 개인지 조회하는 SQL 문을 작성하는 문제입니다. 이때 이름이 NULL인 경우는 집계하지 않으며 중복되는 이름은 하나로 쳐야하는 조건이 있습니다.

NAME이 NULL인 경우를 제외하는 조건을 걸어주고, 이름이 몇개인지 조회하는 문제이므로 중복되는 이름은 하나만 조회하면 동물 보호소에 들어온 동물의 이름이 몇 개 인지 알 수 있습니다.

FROM으로 ANIMAL_INS 테이블을 선택하고,

WHERE 에 조건으로 NAME IS NOT NULL을 걸어주면 NAME 이 NULL이 아닌 Tuple만을 선택합니다.

그리고 중복되는 이름을 하나만 뽑아내기 위해 NAME에  중복을 제거해주는 DISTINCT를 사용해 이름이 중복을 제거해준 뒤,

갯수를 세어주는 COUNT 사용하면 동물 보호소에 들어온 동물의 이름이 몇개인 지 알 수 있습니다.

 

 

 

 

도움이 되셨다면 공감, 댓글 부탁드립니다!

궁금하신 점이나 요청 사항은 언제든지 말씀 해주세요!

 

감사합니다.


댓글