【실습】 조인과 집계 데이터
[1] RENTAL 테이블을 이용하여 연, 연월, 연월일, 전체 각각의 기준으로 RENTAL_ID 기준 렌탈이 일어난 횟수를 출력하라. (전체 데이터 기준으로 모든 행을 출력)
>> 문제 풀이
1 | SELECT * FROM RENTAL; |
1 | SELECT |
[2] RENTAL과 CUSTOMER 테이블을 이용하여 현재까지 가장 많이 RENTAL을 한 고객의 고객ID, 렌탈순위, 누적렌탈횟수, 이름을 출력하라.
>> 문제 풀이
(1) 가장 먼저 RENTAL 순위를 구해야 한다.
- 고객 별로 렌탈 횟수 구함
- ROW_NUMBER() 를 이용해 순위 번호 생성 (렌탈 횟수를 내림차순으로 정렬한 후 생성)
1 | SELECT |
(2) 이 상태에서 첫번째 순위인 데이처를 추출 (가장 많이 RENTAL 한 고객의 데이터)
- ORDER BY + LIMIT 이용
1 | SELECT |
(3) 마지막으로 CUSTOMER 테이블과 조인하여 해당 고객의 이름을 출력한다
-
직접 조인
- CUSTOMER_ID 기준으로 GROUP BY 되어 있으므로 FIRST_NAME, LAST_NAME에 MAX함수를 사용해서 출력한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15SELECT
A.CUSTOMER_ID,
ROW_NUMBER() OVER(ORDER BY COUNT(A.RENTAL_ID) DESC) AS RENTAL_RANK,
COUNT(A.RENTAL_ID) AS RENTAL_COUNT,
MAX(B.FIRST_NAME) AS FIRST_NAME,
MAX(B.LAST_NAME) AS LAST_NAME
FROM
RENTAL A, CUSTOMER B
WHERE
A.CUSTOMER_ID = B.CUSTOMER_ID
GROUP BY
A.CUSTOMER_ID
ORDER BY
RENTAL_COUNT DESC
LIMIT 1;
-
서브커리 활용
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20SELECT
B.CUSTOMER_ID,
B.RENTAL_RANK,
B.RENTAL_COUNT,
C.FIRST_NAME,
C.LAST_NAME
FROM
(
SELECT
A.CUSTOMER_ID,
ROW_NUMBER() OVER(ORDER BY COUNT(A.RENTAL_ID) DESC) AS RENTAL_RANK,
COUNT(A.RENTAL_ID) AS RENTAL_COUNT
FROM RENTAL A
GROUP BY
CUSTOMER_ID
ORDER BY
RENTAL_COUNT DESC
LIMIT 1
) B, CUSTOMER C
WHERE B.CUSTOMER_ID = C.CUSTOMER_ID;