본문 바로가기
코딩테스트/SQL

[프로그래머스] GROUP BY 〉Lv2. 동명 동물 수 찾기

by imsha 2021. 10. 14.
반응형

문제 설명

 


예시

 


풀이 방법

동물 보호소에 들어온 동물(ANIMAL_INS) 이름 중 두 번 이상 쓰인 이름과 해당 이름이 쓰인 횟수를 조회하는 문제입니다. 이 문제의 핵심은 중복된 이름을 추출하는 것으로 HAVING절 대해 배운 후 문제 풀이를 하겠습니다. 그리고 이름이 없는(NULL) 동물은 집계에서 제외하라는 조건(WHERE)이 주어졌고, 결과는 이름 순으로 정렬(ORDER BY)되도록 쿼리를 작성해야 합니다. 


HAVING 구문

HAVING 절은 WHERE절과 동일하게 조건절에 해당합니다. 차이점은 아래의 SQL 기본 구조를 보면 알 수 있듯 WHERE 절은 언제나 FROM 뒤에 위치하고, HAVING 절은 GROUP BY 뒤에 위치합니다. WHERE은 모든 필드에 조건을 둘 수 있는 반면, HAVING은 그룹화된 새 테이블에 조건을 둘 수 있습니다. 즉, 일반 조건은 WHERE절을 사용하고, 그룹 함수를 포함한 조건은 HAVING절에 기술합니다.

SELECT [DISTINCT] 컬럼, 그룹 함수(컬럼)
FROM 테이블명
[WHERE 조건]
[GROUP BY Group대상]
[HAVING 그룹 함수 포함 조건]
[ORDER BY 정렬대상 [ASC/DESC]]

또한 가장 큰 차이는 WHERE은 집계 함수를 사용할 수 없으나, HAVING은 집계함수를 사용하여 조건비교를 할 수 있습니다. 집계 함수는 COUNT, SUM, AVG, MAX, MIN, ROUND 등이 있으며 그룹화된 새 테이블의 특정 조건을 집계하기 위해 HAVING과 함께 사용됩니다.



문제 풀이

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

 


실행 결과

반응형

댓글