📝 Language: Oracle
1
2
3
4
5
6
7
8
9
10
|
SELECT P.PRODUCT_CODE,
SUM(O.SALES_AMOUNT * P.PRICE) SALES
FROM PRODUCT P
JOIN OFFLINE_SALE O
ON P.PRODUCT_ID = O.PRODUCT_ID
GROUP BY PRODUCT_CODE
ORDER BY SALES DESC,
P.PRODUCT_CODE
;
|
🙂 확인 사항
1. PRODUCT 테이블, OFFLINE_SALE 테이블
2. 상품코드 별
3. 매출액 합계 출력
4. 매출액 기준 내림차순 → 상품코드 기준 오름차순 정렬
😮 이 외의 풀이
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
WITH TOTALDATE AS(
SELECT P.PRODUCT_CODE,
P.PRICE,
O.SALES_AMOUNT
FROM PRODUCT P
JOIN OFFLINE_SALE O
ON P.PRODUCT_ID = O.PRODUCT_ID
)
SELECT PRODUCT_CODE,
SUM(PRICE * SALES_AMOUNT) SALES
FROM TOTALDATE
GROUP BY PRODUCT_CODE
ORDER BY SALES DESC,
PRODUCT_CODE
;
|
- Join문을 공통 표현식으로 사용하여 필요한 데이터만 1차 추출
1
2
3
4
5
6
7
8
9
|
SELECT DISTINCT PRODUCT_CODE,
SUM(O.SALES_AMOUNT * P.PRICE) OVER (PARTITION BY PRODUCT_CODE) AS SALES
FROM PRODUCT P
JOIN OFFLINE_SALE O
ON P.PRODUCT_ID = O.PRODUCT_ID
ORDER BY SALES DESC,
PRODUCT_CODE
;
|
1. Window 함수 사용
- 테이블에서 로우 집합을 대상으로 계산하는 함수
- OVER 필수 사용
- PRODUCT_CODE 별로 O.SALES_AMOUNT * P.PRICE의 SUM값 출력
2. DISTINCE 사용
- PRODUCT_CODE마다 SUM값이 출력되므로 중복 제거
🚨 Window 함수는
- 개별 행마다 계산하므로 Group by보다 비효율적일 수 있음
- Distinct의 추가 작업이 필요하므로 비효율적일 수 있음
🔗 소스 코드
GitHub
📚 참고 자료
'Computer > Algorithm_SQL' 카테고리의 다른 글
[Algorithm_SQL] 조건에 맞는 도서와 저자 리스트 출력하기 (Success) (1) | 2023.10.08 |
---|---|
[Algorithm_SQL] 재구매가 일어난 상품과 회원 리스트 구하기 (Success) (0) | 2023.10.06 |
[Algorithm_SQL] 가격대 별 상품 개수 구하기 (Success) (0) | 2023.10.03 |
[Algorithm_SQL] 카테고리 별 상품 개수 구하기 (Success) (0) | 2023.10.02 |
[Algorithm_SQL] 3월에 태어난 여성 회원 목록 출력하기 (Success) (0) | 2023.10.01 |