ToBe끝판왕

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

■ 프로그래밍 SKILLS/SQL

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

업그레이드중 2022. 6. 11. 21:01
반응형

 


 

동명 동물 수 찾기

 

Programmers의 SQL 고득점 Kit

GROUP BY 문제

 

 

 해당 문제 링

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

 


 

정답 및 풀이

 

▶  GROUP BY 절

•  데이터들을 원하는 그룹으로 나눌 수 있다.

•  나누고자 하는 그룹의 칼럼명을 SELECT절과 GROPU BY절 뒤에 추가하면 된다.

•  FROM절과 WHERE절 뒤에 온다.

•  집계함수와 함께 사용되는 상수는 GROUP BY절에 추가하지 않아도 된다.

 

•  GROUP BY 절

SELECT 컬럼명, 그룹함수
FROM 테이블명
GROUP BY 그룹대상;

 

 

▶  HAVING 절

•  GROUP BY 절을 통해 그룹을 짓고, 각 그룹에 조건을 부여할 때 사용한다.

•  GROUP BY 절 다음에 위치한다.

 

•  HAVING 절

SELECT 컬렴명, 그룹함수
FROM 테이블명
GROUP BY 그룹대상
HAVING 그룹함수 포함 조건;

 

 

※ WHERE 절과 HAVING 절 차이

•  WHERE 절은 모든 개별 행에 조건을 줄 수 있다 하지만 HAVING 절은 GROUP BY 된 이후 특정한 그룹의

   행에만 조건을 줄 수 있다.

•  집계함수는 HAVING절과 함께 사용할 수 있지만 WHERE 절은 HAVE절에 포함된 하위 쿼리에 있지 않으면

    집계함수랑 함께 사용할 수 없다.

•  HAVING절은 GROUP BY 절 뒤에 사용하고 WHERE 절은 앞에 사용한다

 

 

※ 집계함수

 

 

▶  정답

•  동물의 이름 개수를 조회하는 것이므로, COUNT 함수를 NAME에 적용해야 한다.

•  동물의 이름이 없는 경우는 집계하지 않으므로 WHERE 조건절에 사용한다.

•  동물의 이름을 그룹화하여 개수를 세고 두 번 이상 쓰인 이름에 대하여 그룹에 COUNT를 사용하여 조건절로 적용한다.

•  결과는 이름순으로 나오게 정렬해야 하므로 ORDER BY를 맨 마지막에 써준다.

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

 

 

 

반응형
Comments