프로그래머스 중복제거하기
https://school.programmers.co.kr/learn/courses/30/lessons/59408?language=mysql
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제설명
ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다.
동물 보호소에 들어온 동물의 이름은 몇 개인지 조회하는 SQL 문을 작성해주세요. 이때 이름이 NULL인 경우는 집계하지 않으며 중복되는 이름은 하나로 칩니다.
DISTINCT
- SELECT로 DB 컬럼을 조회할 때 중복되는 값을 제거하고 조회
# 구조
SELECT DISTINCT 컬럼1 FROM 테이블
# cf) 2개 이상 컬럼 사용 -> 명시한 컬럼 1, 2 모두 동일할 때 중복제거
SELECT DISTINCT 컬럼1, 컬럼2 FROM 테이블
# 문제 풀이
SELECT COUNT(DISTINCT(NAME)) as count FROM ANIMAL_INS
GROUP BY
- 지정한 컬럼의 중복값을 묶어준다.
- 해당 문제에서는 서브쿼리로 중복값끼리 묶인 테이블을 만들고 해당 테이블의 전체 row수를 COUNT해준다
# 구조
SELECT * FROM 테이블 GROUP BY 컬럼1
# 문제 풀이
# 주의, MYSQL경우 서브쿼리로 만든 테이블의 alias(이름)을 지정해야 함, 아래코드에서는 GROUPTABLE로 명시
SELECT COUNT(*) as count
FROM (SELECT NAME FROM ANIMAL_INS
WHERE NAME IS NOT NULL
GROUP BY NAME) GROUPTABLE
'SQL' 카테고리의 다른 글
[SQL] 특정 자릿수에서 반올림, 버림 (ROUND, TRUNCATE) (1) | 2023.11.24 |
---|---|
[SQL] LIKE (1) | 2023.10.07 |
[SQL] NULL 처리(IFNULL, IF, CASE, COALESCE) (0) | 2023.10.06 |