profile image

L o a d i n g . . .

https://school.programmers.co.kr/learn/courses/30/lessons/131533

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

찾아야 하는 값

  1. 상픔코드 별
  2. 매출액 (판매가 * 판매량) 합계 출력

조회 할 테이블: PRODUCT, OFFLINE_SALE

조건

  1. PRODUCT, OFFLINE_SALE 테이블 JOIN
  2. 매출액을 기준으로 내림차순 정렬
  3. 매출액이 같다면, 상품코드를 기준으로 오름차순 정렬

풀이

1. 상품코드별 매출액 (판매가 * 판매량) 합계 구하기

SELECT PRODUCT_CODE, SUM(PRICE * SALES_AMOUNT) AS SALES
  • 상품코드별 (PRODUCT_CODE) 과 매출액 구하기 위해 SUM() 함수 사용
  • 매출액에 대한 값을 AS를 이용하여 SALES 별칭 사용

 

2. PRODUCT, OFFLINE_SALE 테이블 JOIN

SELECT PRODUCT_CODE, SUM(PRICE * SALES_AMOUNT) AS SALES
FROM PRODUCT P JOIN OFFLINE_SALE OS
ON P.PRODUCT_ID = OS.PRODUCT_ID
  • 내부 조인 (INNER JOIN) 사용
  • PRODUCT, OFFLINE_SALE를 JOIN 하는데 각각 P, OS 라고 함
  • ON 절을 사용하여 조인 조건으로 P와 OS의 ID가 같아야만 데이터를 가져옴

// ON: JOIN 전에 조건을 필터링

// WHERE: JOIN 후에 조건을 필터링

// INNER JOIN 하면 둘 다 차이 없고, OUTER JOUN 시 ON으로 해야 원하는 결과 얻을 수 있음

 

3, 4. 매출액을 기준으로 내림차순 정렬 및 상품코드를 기준으로 오름차순 정렬

SELECT PRODUCT_CODE, SUM(PRICE * SALES_AMOUNT) AS SALES
FROM PRODUCT P JOIN OFFLINE_SALE OS
ON P.PRODUCT_ID = OS.PRODUCT_ID
GROUP BY P.PRODUCT_ID
ORDER BY SALES DESC, PRODUCT_CODE ASC
  • GROUP BY를 이용하여 PRODUCT_ID 에 따라 각 제품별로 매출을 계산함
  • 이후 ORDER BY를 이용하여 매출액을 기준으로 내림차순 (DESC) 하고, 매출액이 같은 경우엔 상품 코드를 기준으로 오름차순 정렬

(좌) GROUP BY를 사용했을 경우 / (우) 사용하지 않았을 경우

  • GROUP BY를 사용하지 않으면, 모든 데이터가 하나의 그룹으로 취급되는데 P와 OS의 아이디가 같은 ROW에다가 모든 제품의 매출이 합쳐져서 하나의 결과로 나타남
복사했습니다!