데이터베이스/코딩테스트

[Programmers]고양이와 개는 몇 마리 있을까(GROUP BY, PARTITION BY)

DS지니 2023. 11. 2. 01:48
728x90
반응형

고양이와 개는 몇 마리 있을까

 

https://school.programmers.co.kr/learn/courses/30/lessons/59040

 

Q : 동물 보호소에 들어온 동물 중 고양이와 개가 각각 몇 마리인지 조회하는 SQL문을 작성해주세요. 이때 고양이를 개보다 먼저 조회해주세요.

 

1. GROUP BY 사용

SELECT ANIMAL_TYPE, COUNT(*) FROM ANIMAL_INS
GROUP BY ANIMAL_TYPE
ORDER BY ANIMAL_TYPE

 

2. PARTITION BY 사용

SELECT DISTINCT(ANIMAL_TYPE), COUNT(*) OVER (PARTITION BY ANIMAL_TYPE)
FROM ANIMAL_INS
ORDER BY ANIMAL_TYPE

 

 

 

 

두 개의 차이는 무엇일까?
- GROUP BY 는 특정 컬럼을 기준으로 집계 함수를 사용하여 건수(COUNT), 합계(SUM), 평균(AVG) 등 집계성 데이터를 추출할 때 사용된다. 또 Group 에 따라 행을 집약해 결과를 도출하기 때문에, 그 과정에서 (GROUP BY 로 묶었던 컬럼인 ANIMAL_TYPE 만 제외하고) 기존의 상세 데이터들을 잃게 된다.

- PARTITION BY 는 GROUP BY와 다르게 기존 행의 정보들이 모두 유지된다. 그렇기 때문에 SELECT ANIMAL_TYPE으로 쿼리를 추출한다면 아래와 같은 그림처럼 나오게 된다. ANIMAL_TYPE을 중복처리(DISTINCT) 해주게 되면 GROUP BY와 같은 결과를 추출할 수 있다.

 

 

728x90
반응형