본문 바로가기
데이터 분석/SQL 연습문제

코테 연습 11일차 (프로그래머스 SQL 고득점 Kit)

2022. 2. 14.

My SQL / sublime

 

코딩테스트 연습 - 중복 제거하기

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디

programmers.co.kr

문제: 중복 제거하기

동물 보호소에 들어온 동물의 이름은 몇 개인지 조회하는 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)은 일치하지 않아도 됩니다.

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


풀이

약 6시간 전, 구글 스프레드 시트에서 열심히 중복 제거 COUNT를 했다. 스프레드 시트에는 COUNTUNIQUE라는 함수가 있어서 비슷하게 때려맞춰 봤는데 틀렸다.

제출한 오답 1

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

제출한 오답 2

-- 코드를 입력하세요
SELECT COUNT(UNIQUE(NAME))
FROM ANIMAL_INS

몰랐던 문법

 

[SQL] Null 주의 사항

1. null 값에 정수형 연산을 하게 되면 null이 된다. null == 12 * 34 * null - 이것에 대해 실수를 하지 않으려면 정수형 컬럼에 기본값을 주거나, NVL 같은 함수를 사용하여 Null 값을 다른 정수형 값으로

tawool.tistory.com

SELECT DISTINCT NAME
FROM ANIMAL_INS

->중복 제거한 NAME 조회(null 값도 distinct로 간주하여 결과에 null 포함)

SELECT COUNT(NAME)
FROM ANIMAL_INS

-> NULL 값을 제외한 NAME의 갯수를 COUNT

SELECT COUNT(DISTINCT(NAME))
FROM ANIMAL_INS

->  NULL 값을 제외한 중복 제거한 NAME의 갯수를 COUNT

다시 제출한 답

-- 코드를 입력하세요
SELECT COUNT(DISTINCT(NAME))
FROM ANIMAL_INS
WHERE NAME IS NOT NULL // 생략 가능

-> DISTINCT와 조건문을 활용하는 방법. 쉽고 직관적이다. 단, COUNT 시 NULL 값은 제외되므로 WHERE 조건은 없어도 무방하다.

2022.02.14

 

 

댓글