개키우는개발자 : )

PostgreSQL 실습문제2 본문

PostgreSQL/조인과 집계 데이터

PostgreSQL 실습문제2

DOGvelopers 2019. 11. 9. 20:35
반응형

RENTAL과 CUSTOMER 테이블을 이용하여 현재까지 가장 많이 RENTAL을 한 고객의 고객ID, 렌탈순위, 누적렌탈 횟수, 이름까지 출력하세요.

 

SELECT * FROM RENTAL;

실습1

SELECT * FROM CUSTOMER;

실습2

 

 

- MAX , WHERE 

SELECT
	ROW_NUMBER() OVER (
	ORDER BY COUNT(A.RENTAL_ID) DESC) AS RENTAL_RANK ,
	MAX(B.FIRST_NAME) AS FIRST_NAME,
	MAX(B.LAST_NAME) AS LAST_NAME,
	A.CUSTOMER_ID,
	COUNT(*) RENTAL_COUNT
FROM
	RENTAL A,
	CUSTOMER B
WHERE
	A.CUSTOMER_ID = B.CUSTOMER_ID
GROUP BY
	A.CUSTOMER_ID
ORDER BY
	RENTAL_RANK
LIMIT 1;

- MAX,INNER JOIN

SELECT
	ROW_NUMBER() OVER (
ORDER BY
	COUNT(A.RENTAL_ID) DESC) AS RENTAL_RANK ,
	MAX(B.FIRST_NAME) AS FIRST_NAME,
	MAX(B.LAST_NAME) AS LAST_NAME,
	A.CUSTOMER_ID,
	COUNT(*) RENTAL_COUNT
FROM
	RENTAL A
INNER JOIN CUSTOMER B ON
	(A.CUSTOMER_ID = B.CUSTOMER_ID)
GROUP BY
	A.CUSTOMER_ID
ORDER BY
	RENTAL_RANK
LIMIT 1;

- INNER JOIN, 여러개의 GROUP BY

SELECT
	ROW_NUMBER() OVER (
ORDER BY
	COUNT(A.RENTAL_ID) DESC) AS RENTAL_RANK ,
	B.FIRST_NAME,
	B.LAST_NAME,
	A.CUSTOMER_ID,
	COUNT(*) RENTAL_COUNT
FROM
	RENTAL A
INNER JOIN CUSTOMER B ON
	(A.CUSTOMER_ID = B.CUSTOMER_ID)
GROUP BY
	A.CUSTOMER_ID , B.FIRST_NAME , B.LAST_NAME
ORDER BY
	RENTAL_RANK
LIMIT 1;

- 서브쿼리

SELECT
	A.RENTAL_RANK,
	B.FIRST_NAME,
	B.LAST_NAME,
	B.CUSTOMER_ID,
	A.RENTAL_COUNT
FROM
	(
	SELECT
		ROW_NUMBER() OVER (
	ORDER BY
		COUNT(A.RENTAL_ID) DESC) AS RENTAL_RANK ,
		A.CUSTOMER_ID,
		COUNT(*) RENTAL_COUNT
	FROM
		RENTAL A
	GROUP BY
		A.CUSTOMER_ID
	ORDER BY
		RENTAL_RANK
	LIMIT 1 ) A,
	CUSTOMER B
WHERE
	A.CUSTOMER_ID = B.CUSTOMER_ID;

 

4가지 방법 모두 같은 결과의 값을 조회합니다.

 

결과

 

반응형

'PostgreSQL > 조인과 집계 데이터' 카테고리의 다른 글

PostgreSQL 실습문제1  (0) 2019.11.09
PostgreSQL LAG,LEAD 함수  (0) 2019.11.09
PostgreSQL ROW_NUMBER, RANK, DENSE_RANK 함수  (0) 2019.11.09
PostgreSQL 분석함수 AVG 함수  (0) 2019.11.09
PostgreSQL 분석함수  (0) 2019.11.09
Comments