Tany
백문이불어일Tany
Tany
전체 방문자
오늘
어제
  • 분류 전체보기 (197)
    • JAVA TPC (1)
    • JAVA (10)
    • CS (3)
    • SPRING (5)
    • DFS BFS (12)
    • SQL (7)
    • 알고리즘 정리 (76)
    • Git, Github (3)
    • 학습 계획 (36)
    • 코드스쿼드 학습일지 (19)
    • Servlet (5)
    • VPC (2)
    • AWS (4)
    • JPA (5)
    • 취미생활 (2)
    • 프로젝트 기록 (7)
      • Issue Tracker 삽질 기록 (5)
      • 당근마켓 API 서버 기록 (2)
      • 나만의 블로그 제작 기록 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • EC2
  • 알고리즘
  • 해시
  • Stack
  • 주간 학습 계획
  • 인프런
  • 백준
  • 자료구조
  • 재귀
  • AWS
  • 이분탐색
  • 자바
  • MVC
  • 완전탐색
  • JPA
  • JSP
  • 프로그래머스
  • hash
  • 정렬
  • MySQL
  • dfs
  • java
  • 문자열
  • 이코테
  • BFS
  • sql
  • github
  • 면접을 위한 CS 전공지식 노트
  • 파이썬
  • GIT

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Tany

백문이불어일Tany

상품 별 오프라인 매출 구하기
SQL

상품 별 오프라인 매출 구하기

2022. 11. 18. 09:03

출처) 프로그래머스 Facebook

 

 

 

문제 설명

다음은 어느 의류 쇼핑몰에서 판매중인 상품들의 상품 정보를 담은 PRODUCT 테이블과, 오프라인 상품 판매 정보를 담은 OFFLINE_SALE 테이블 입니다. PRODUCT 테이블은 아래와 같은 구조로 PRODUCT_ID, PRODUCT_CODE, PRICE 는 각각 상품 ID, 상품 코드, 판매가를 나타냅니다. 상품 별로 중복되지 않는 8자리 상품코드 값을 가지며, 앞 2자리는 카테고리 코드를 의미합니다.

아래는 PRODUCT 테이블입니다.

 

Column name Type Nullable
PRODUCT_ID INTEGER FALSE
PRODUCT_CODE VARCHAR(8) FALSE
PRICE INTEGER FALSE

 

 

OFFLINE_SALE 테이블은 아래와 같은 구조로 되어있으며 OFFLINE_SALE_ID, PRODUCT_ID, SALES_AMOUNT, SALES_DATE 는 각각 오프라인 상품 판매 ID, 상품 ID, 판매량, 판매일을 나타냅니다. 

동일한 날짜, 상품 ID 조합에 대해서는 하나의 판매 데이터만 존재합니다.

아래는 OFFLINE_SALE 테이블입니다.

 

Column name Type Nullable
OFFLINE_SALE_ID INTEGER FALSE
PRODUCT_ID INTEGER FALSE
SALES_AMOUNT INTEGER FALSE
SALES_DATE DATE FALSE

 

문제

PRODUCT 테이블과 OFFLINE_SALE 테이블에서 상품코드 별 매출액 (판매가 * 판매량) 합계를 출력하는 SQL 문을 작성해주세요. 결과는 매출액을 기준으로 내림차순 정렬하고 매출액이 같다면 상품코드를 기준으로 오름차순 정렬해주세요.

 

예시

예를 들어 PRODUCT 테이블이 다음과 같고,

ONLINE_SALE_ID PRODUCT_CODE PRICE
1 A1000011 15000
2 A1000045 8000
3 C3000002 42000

 

 

OFFLINE_SALE 테이블이 다음과 같다면,


       
OFFLINE_SALE_ID PRODUCT_ID SALES_AMOUNT SALES_DATE
1 1 2 2022-02-21
2 1 2 2022-03-02
3 3 3 2022-05-01
4 2 1 2022-05-24
5 1 2 2022-07-14
6 2 1 2022-09-22

 

 

각 상품 별 총 판매량과 판매가는 다음과 같습니다.

1.  PRODUCT_CODE 가 A1000011인 상품은 총 판매량이 6개, 판매가가 15,000원

2. PRODUCT_CODE 가 A1000045인 상품은 총 판매량이 2개, 판매가가 8,000원

3. PRODUCT_CODE 가 C3000002인 상품은 총 판매량이 3개, 판매가가 42,000원

 

그러므로 각 상품 별 매출액을 계산하고 정렬하면 결과가 다음과 같이 나와야 합니다.


PRODUCT_CODE SALES
C3000002 126000
A1000011 90000
A1000045 16000

 

 


 

 

문제 풀이

PRODUCT_ID 를 조건으로 두 개의 테이블을 JOIN 하고 집계함수 사용을 위해 GROUP BY 를 사용한다.

매출액은 판매가 * 판매량이므로 두 값을 곱하고 합계를 추려내야하니 SUM() 함수를 사용하면 끝 !

SELECT P.PRODUCT_CODE, SUM(P.PRICE * O.SALES_AMOUNT) AS SALES 
FROM PRODUCT AS P 
JOIN OFFLINE_SALE AS O
    ON P.PRODUCT_ID = O.PRODUCT_ID
    
GROUP BY P.PRODUCT_CODE
ORDER BY SALES DESC, PRODUCT_CODE ASC;

'SQL' 카테고리의 다른 글

있었는데요 없었습니다  (0) 2022.11.24
없어진 기록 찾기  (0) 2022.11.24
강원도에 위치한 생산공장 목록 출력하기  (0) 2022.11.17
흉부외과 또는 일반외과 의사 목록 출력하기 [SELECT]  (0) 2022.11.17
12세 이하인 여자 환자 목록 출력하기 [SELECT]  (0) 2022.11.17
    'SQL' 카테고리의 다른 글
    • 있었는데요 없었습니다
    • 없어진 기록 찾기
    • 강원도에 위치한 생산공장 목록 출력하기
    • 흉부외과 또는 일반외과 의사 목록 출력하기 [SELECT]
    Tany
    Tany
    내가 보려고 만드는 백엔드 기록장 Github https://github.com/juni8453

    티스토리툴바