My SQL / sublime
문제: 중복 제거하기
동물 보호소에 들어온 동물의 이름은 몇 개인지 조회하는 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
몰랐던 문법
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 조건은 없어도 무방하다.
'데이터 분석 > SQL 연습문제' 카테고리의 다른 글
코테 연습 13일차 (프로그래머스 SQL 고득점 Kit) (0) | 2022.02.16 |
---|---|
코테 연습 12일차 (프로그래머스 SQL 고득점 Kit) (0) | 2022.02.15 |
코테 연습 10일차 (프로그래머스 SQL 고득점 Kit) (0) | 2022.02.13 |
코테 연습 9일차 (프로그래머스 SQL 고득점 Kit) (0) | 2022.02.12 |
코테 연습 8일차 (프로그래머스 SQL 고득점 Kit) (0) | 2022.02.11 |
댓글