본문 바로가기
DB/SQL 예제

[SQL예제][PostgreSQL] 3. 조인과 집계데이터(COUNT(), TO_CHAR, GROUP BY, ROLLUP)

by 키세스라고 2023. 3. 6.

RENTAL 테이블을 이용하여 연, 연월, 연월일, 전체 각각의 기준으로 RENTAL_ID 기준 렌탈이 일어난 횟수를 출력하라. (전체 데이터 기준으로 모든행을 출력)

SELECT * FROM RENTAL
예시

# 풀이 순서

  1. TO_CHAR() 를 사용하여 RENTAL_DATE 를 전체, 연도, 연월, 연월일 기준으로 구분한다.
  2. GROUP BY 와 ROLLUP, COUNT() 를 사용하여 각 단위(?)별로 집계한다.
  3. 큰 단위부터 (상위 그룹부터) GROUP BY 로 묶어줘야한다.

# 문제 풀이

 

1. COUNT(RENTAL_DATE) 를 사용하여 전체 건수를 조회한다.

SELECT COUNT(RENTAL_ID)
FROM RANTAL

COUNT()

 

2. TO_CHAR() 와 GROUP BY 를 사용하여 연도 별 합계부터 조회한다.

SELECT TO_CHAR(rental_date, 'YYYY') AS Y
	, COUNT(rental_id)
FROM RENTAL
GROUP BY
	TO_CHAR(rental_date, 'YYYY')

TO_CHAR()
GROUP BY

 

3. 동일한 방법으로 월과 일 또한 구분해주면 된다.

SELECT TO_CHAR(RENTAL_DATE, 'YYYY') AS YYYY
	, TO_CHAR(RENTAL_DATE, 'MM') AS MM
	, TO_CHAR(RENTAL_DATE, 'DD') AS DD
	, COUNT(RENTAL_ID)
FROM RENTAL R 
GROUP BY
	TO_CHAR(RENTAL_DATE, 'YYYY')
	,TO_CHAR(RENTAL_DATE, 'MM')
	,TO_CHAR(RENTAL_DATE, 'DD')
ORDER BY YYYY, MM, DD

  - 단, GROUP BY  만 사용한 경우에는 가장 마지막인, 일 기준으로만 COUNT 가 된다.

  - 연 / 월 단위 별 COUNT 를 구하기 위해서는 ROLLUP 을 사용해줘야 한다.

ROLLUP

 

4. GROUP BY 절에서 ROLLUP 사용하여 각 단위(상위 그룹)별로도 집계하기

SELECT TO_CHAR(RENTAL_DATE, 'YYYY') AS YYYY
	, TO_CHAR(RENTAL_DATE, 'MM') AS MM
	, TO_CHAR(RENTAL_DATE, 'DD') AS DD
	, COUNT(RENTAL_ID)
FROM RENTAL R 
GROUP BY
    ROLLUP (TO_CHAR(RENTAL_DATE, 'YYYY')
        ,TO_CHAR(RENTAL_DATE, 'MM')
        ,TO_CHAR(RENTAL_DATE, 'DD')
      	  )

댓글