Code KATA/SQL 코드카타

[2024.12.04] 중복 제거하기

iiblueblue 2024. 12. 5. 14:45

문제 설명

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDIGION, 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 2024-03-20 18:06:00 Sick NULL Spayed Female
A412626 Dog 2016-03-13 11:17:00 Normal *Sam Neutered Male
A524634 Dog 2014-10-24 14:45:00 Normal *Sam Neutered Male
A465637 Dog 2017-16-14 11:54:00 Normal *Sweetie Spayed Female

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

count
2

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

 

 

문제 풀이

풀이 언어 : MySQL

-- 코드를 입력하세요
SELECT COUNT(DISTINCT NAME) "count"
FROM ANIMAL_INS;

단순히 테이블의 데이터를 그대로 가져오는 것이 아닌 갯수를 확인해야하는 문제이기 때문에 집계함수인 COUNT를 사용하였다. NULL값을 제거하기 위해 COUNT 집계함수 중에도 COUNT(표현식) 형태의 집계함수를 사용하였으며 중복을 제거하기 위해 NAME 앞에 중복을 제거하는 DISTINCT를 붙였다.

 

참고사항

COUNT(표현식)과 COUNT(*)의 결과는 다르게 나올 수 있다.

COUNT(*) NULL 값을 포함한 행의 수를 출력한다.
COUNT(표현식) 표현식의 값이 NULL 값인 것을 제외한 행의 수를 출력한다.

COUNT(*)은 전체 칼럼이 NULL인 행은 존재할 수 없기 때문에 NULL값이 포함된 칼럼이 일부 있다고 하더라도 출력하지만 COUNT(NAME)의 경우 NAME값이 NULL일 경우 출력하지 않는다.

https://www.notion.so/GROUP-BY-HAVING-5ca61e2e593a42f4bab573345463a7fb?pvs=4

 

참고사항

COUNT 함수에서 중복을 없애기 위해서는 괄호 안에 DISTINCT를 적어주어야 한다.

https://www.notion.so/GROUP-BY-HAVING-5ca61e2e593a42f4bab573345463a7fb?pvs=4

 

 

오답노트

처음 풀이하였을 때 DINSTINCT를 SELECT 옆에 붙여서 틀렸다.

NULL값을 없애기 위해 WHERE절을 사용해야 하는줄 알고 WHERE절을 붙여 코드를 만들었었다.

 

 

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/59408

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr