Algorithm Solving/SQL

[programmers] SQL Lv. 2 - 중복 제거하기

기만나🐸 2022. 9. 29. 14:17

문제

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_IDANIMAL_TYPEDATETIMEINTAKE_CONDITIONNAMESEX_UPON_INTAKE는 각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다.

동물 보호소에 들어온 동물의 이름은 몇 개인지 조회하는 SQL 문을 작성해주세요. 이때 이름이 NULL인 경우는 집계하지 않으며 중복되는 이름은 하나로 칩니다.

 

예시

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

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

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


풀이

문제: 동물 보호소에 들어온 동물의 이름은 몇 개인지 조회하는 SQL 문을 작성해주세요. 이때 이름이 NULL인 경우는 집계하지 않으며 중복되는 이름은 하나로 칩니다.

 

위 문제의 조건을 하나씩 SQL문으로 바꾼다.

1. 조회하는 SQL 문 => SELECT 문

2. 동물 보호소에 들어온 동물 => FROM ANIMAL_INS

3. 동물의 이름은 몇 개인지 => COUNT(NAME)

4. 이름이 NULL인 경우는 집계하지 않으며 => WHERE NAME IS NOT NULL

5. 중복되는 이름은 하나로 칩니다:

SQL에서 중복제거는 DISTINCT를 사용한다.

=> DISTINCT(NAME)

 

따라서 SQL문을 완성하면 다음과 같다.

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