안녕하세요! 데코입니다!
오늘은 프로그래머스 코딩테스트 연습에 있는 "중복 제거하기" 문제를 포스팅하려고 합니다!
바로 포스팅 시작할게요! :)
(출처 : https://school.programmers.co.kr/learn/courses/30/lessons/59408)
1. 문제 : 중복 제거하기(Lv. 2)
2. 문제 설명
ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다.
ANIMAL_INS 테이블 구조는 다음과 같으며,
ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, 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 | 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')은 일치하지 않아도 됩니다.)
3. 문제 풀이
# 1안
SELECT COUNT(DISTINCT(NAME)) AS count
FROM ANIMAL_INS
이번 문제는 1안 한 가지로 작성했습니다!
# 1안 풀이 설명
## [ 문제 접근 설명 ]
예시에서 설명한 것과 마찬가지로 NULL과 중복되는 이름을 고려해서 이름의 고유값의 수를 산출하는 문제에요!
예시를 보면 *Sam은 중복으로 데이터가 들어가 있는 것을 파악할 수 있네요!
따라서 'NAME' 컬럼을 기준으로 고유한 값의 데이터만 조회하여 개수를 새면 됩니다!
## [ 1안 쿼리 작성 설명 ]
ANIMAL_INS의 테이블에 존재하는 컬럼들이 [출력 결과]에 나와 있는 컬럼들과 동일하게
" SELECT " 이후에 'COUNT(DISTINCT(NAME))' 을 작성 후
컬럼명을 'count'으로 나타나게 변경(Alias를 이용한 별칭 설정)
이렇게 간단하게 쿼리를 작성했습니다!
4. 데코의 문제 풀이 후기
이번 문제는 특정 컬럼의 고유값을 조회하고 개수를 산출하는 문제에요!
1안에서 나온 SQL의 함수인 DISTINCT()은 처음 다뤄보네요!
DISTINCT
(형용사) 뚜렷한, 별개의
DISTINCT() 함수는 영어단어 의미 그대로 "별개의 값(고유값)"을 산출하는데 이용되는 함수입니다!
count()함수는 저번 포스팅에서도 다룬 집계함수이죠!
주의해야 하는 것은 집계함수는 컬럼에 NULL 값이 있는 경우에 NULL 값을 제외하고 처리합니다!
저도 데이터 분석 업무를 하면서 DISTINCT() 함수는 정말 많이 이용했어요!
데이터 전처리뿐만 아니라 log 데이터에서 이용자의 수를 파악할 때 DISTINCT()를 이용한 기억이 있네요!
( python에서도 unique() 정말 많이 이용하지 않나요..! )
'SQL' 고유한 갑 산출 : DISTINCT()
'python' 고유한 값 산출 : uniuqe()
이렇게 기억하고 쿼리 작성에 활용하면 됩니다!
이번 문제는 특정 컬럼의 고유값을 조회하고 개수를 산출하는 문제를 풀어봤습니다!
설명이 어려운 부분 혹은 잘 이해가 안 가는 부분은 그리고 더 궁금한 내용이 있다면
언제든지 댓글로 남겨주세요!
빠르게 궁금증을 해결해드릴게요!
공감과 댓글은 큰 힘이 됩니다!
읽어주셔서 감사해요!
또 다른 SQL 문제로 찾아뵐게요!
'Skill Sets > SQL' 카테고리의 다른 글
[SQL] 가격대 별 상품 개수 구하기(프로그래머스/MySQL/Level 2) (33) | 2023.01.10 |
---|---|
[SQL] 카테고리 별 상품 개수 구하기(프로그래머스/MySQL/Level 2) (25) | 2023.01.08 |
[SQL] 고양이와 개는 몇 마리 있을까(프로그래머스/MySQL/Level 1) (16) | 2023.01.02 |
[SQL] 강원도에 위치한 생산공장 목록 출력하기(프로그래머스/MySQL/Level 1) (16) | 2023.01.01 |
[SQL] 최댓값 구하기(프로그래머스/MySQL/Level 1) (12) | 2022.12.31 |