![article thumbnail image](https://blog.kakaocdn.net/dn/b3W3Rf/btsAO4F44nT/CswA8kZiwoLZkIK2gAq6B1/img.png)
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
찾아야 하는 값
- 상픔코드 별
- 매출액 (판매가 * 판매량) 합계 출력
조회 할 테이블: PRODUCT, OFFLINE_SALE
조건
- PRODUCT, OFFLINE_SALE 테이블 JOIN
- 매출액을 기준으로 내림차순 정렬
- 매출액이 같다면, 상품코드를 기준으로 오름차순 정렬
풀이
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를 사용하지 않으면, 모든 데이터가 하나의 그룹으로 취급되는데 P와 OS의 아이디가 같은 ROW에다가 모든 제품의 매출이 합쳐져서 하나의 결과로 나타남
'코딩테스트 - 프로그래머스 > SQL' 카테고리의 다른 글
[SQL] 가격대 별 상품 개수 구하기 (0) | 2023.11.24 |
---|---|
[SQL] 최댓값 구하기 (0) | 2023.11.24 |
[SQL] 경기도에 위치한 식품 창고 목록 출력하기 (0) | 2023.11.21 |
[SQL] 진료과별 총 예약 횟수 출력하기 (0) | 2023.11.20 |
[SQL] 가장 비싼 상품 구하기 (0) | 2023.11.20 |