본문 바로가기
Computer/Algorithm_SQL

[Algorithm_SQL] 상품 별 오프라인 매출 구하기 (Success)

by HJ0216 2023. 10. 4.
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

📝 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 FUNCTION 종류

 

🚨 Window 함수는

    - 개별 행마다 계산하므로 Group by보다 비효율적일 수 있음

    - Distinct의 추가 작업이 필요하므로 비효율적일 수 있음

 

 

 

🔗 소스 코드
GitHub

 

📚 참고 자료

 

윈도우 함수

윈도우 함수는 테이블에서 로우 집합을 대상으로 계산하는 함수다. 그 로우 집합은 한 로우에 대해서 어떠한 방식으로 관계된 로우들이다. 이 함수는 로우 집합 단위로 계산한다는 점에서 집계

www.postgresql.kr

 

윈도우함수(WINDOW FUNCTION) 총정리, 순위함수와 분석함수

SQL의 윈도우 함수란 행과 행 간을 비교, 연산, 정의하기 위한 함수이다. 분석함수 또는 순위함수라고 하기도 한다. 다른 함수들처럼 중첩해서 사용할 수는 없지만 서브쿼리에서는 사용가능하다.

for-my-wealthy-life.tistory.com