본문 바로가기
Programming/DB, SQL

[프로그래머스]동명 동물 수 찾기(mysql)

by HBGB 2021. 8. 27.

https://programmers.co.kr/learn/courses/30/lessons/59041#

 

코딩테스트 연습 - 동명 동물 수 찾기

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디

programmers.co.kr

 

문제 요구사항은 다음과 같다

  • ANIMAL_INS 테이블에서 두번 이상 쓰인 이름과 횟수를 출력
  • 이름없는 건 집계에서 제외
  • 이름순 조회

group by 와 having 을 적절히 이용하면 되는 문제이다.

 

SELECT NAME, COUNT(NAME) AS COUNT 
FROM ANIMAL_INS 
WHERE NAME IS NOT NULL
AND TRIM(NAME) <> ""
GROUP BY NAME 
HAVING COUNT(NAME) >= 2 
ORDER BY NAME;

 

문제 풀이 과정에서 애매하게 알던 점을 정리할 수 있었다.

  • count(*) : NULL 포함, 중복 포함 행 수
  • count(컬럼명) : NULL 제외, 중복 포함 컬럼 수
  • count(distinct 컬럼명) : NULL 제외, 중복 제외 컬럼 수

 

사실 "이름이 없는 것"에 빈 스트링도 포함인지는 문제에서 명확히 나오지 않았다.

하지만 만약 실무에서 NULL은 아니지만 의미없는 문자열도 제외하고 싶다면

TRIM(NAME) <> ""

위처럼 스페이스, 탭, 빈 스트링을 모두 제외할 수 있도록 하는 것이 좋다고 생각한다.

 

 

 

댓글