본문 바로가기
Database

[프로그래머스 SQL - GROUP BY] 동명 동물 수 찾기

by 진홍이 2021. 7. 6.
728x90

동명 동물 수 찾기

문제

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

동물 보호소에 들어온 동물 이름 중 두 번 이상 쓰인 이름과 해당 이름이 쓰인 횟수를 조회하는 SQL문을 작성해주세요. 이때 결과는 이름이 없는 동물은 집계에서 제외하며, 결과는 이름 순으로 조회해주세요.

예시

문제에서 원하는건 

  • GROUP BY를 사용해 NAME을 묶어준다
  • 2번이상 쓰인 이름을 찾기때문에 HAVING을 사용해준다
  • 몇번 사용되었는지 COUNT를 해준다.

이렇게 3가지 입니다. 

 

먼저 GROUP BY를 사용해 NAME으로 묶어주면서 COUNT까지 조회해 보겠습니다. 

SELECT 
    NAME, COUNT(NAME) AS 'COUNT' 
FROM 
    ANIMAL_INS 
GROUP BY 
    NAME 
ORDER BY 
    NAME

SELECT로 NAME과 COUNT를 사용해 NAME의 수를 세어 COUNT로 표기해 주었습니다.

여기서 주의해야 할 점은 COUNT(*)를 사용하면

NULL 값도 세기때문에 결과가 오답이 나올 수 있어 정확히 NAME이라 써 넣었습니다.

 

그리고 이번에는 HAVING을 추가해 쿼리문을 완성시키겠습니다.

HAVING은 간단하게 생각하면

GROUP BY의 WHERE절 이라고 생각하시면 될것 같습니다.

GROUP BY의 결과에 조건을 붙일 수 있습니다.

SELECT 
    NAME, COUNT(NAME) AS 'COUNT' 
FROM 
    ANIMAL_INS 
GROUP BY 
    NAME 
HAVING 
    COUNT(NAME) > 1 
ORDER BY 
    NAME

이렇게 작성하시면 완성입니다.

출처:[프로그래머스 코딩테스트 연습] - https://programmers.co.kr/learn/courses/30/lessons/59041

728x90