▶중복 제거하기 (SQL) : SUM, MAX, MIN (level 2)
▶문제
ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다.
동물 보호소에 들어온 동물의 이름은 몇 개인지 조회하는 SQL 문을 작성해 주세요. 이때 이름이 NULL인 경우는 집계하지 않으며 중복되는 이름은 하나로 칩니다.
▶예시
예를 들어 ANIMAL_INS 테이블이 다음과 같다면
보호소 들어온 동물의 이름은 NULL(없음), *Sam, *Sam, *Sweetie입니다. 이 중 NULL과 중복되는 이름 고려하면, 보호소 들어온 동물 이름의 수 2입니다. 따라서 SQL문 실행하면 다음과 같이 나와야 합니다.
▶풀이
먼저 동물 이름의 count를 출력하도록 코드를 작성합니다.
SELECT count(name) from animal_ins
이렇게 하면 null과 중복된 이름을 처리하지 못합니다.
count(name)에 distinct를 넣어주면 중복된 이름을 하나로 처리해 줍니다.
→ count(distinct name)
그리고 null로 된 값들을 제거해주어야 합니다.
이런 조건은 보통 where뒤에 추가해 줍니다
→ where name is not null
이름이 null이 아닐 때라는 조건을 넣어줌으로써, 없는 이름은 제거해 줍니다.
SELECT count(distinct name)
from animal_ins
where name is not null
오늘이 중복이라 그냥 중복이 들어가는 문제를 풀고 싶었다.
백준에도 중복이 있었지만 쉬운 문제는 다 풀었고 어려운 문제만 남아서 프로그래머스로 넘어왔다.
다행히 프로그래머스에는 문제가 있었고, SQL이었지만 쉽게 풀 수 있었다.