https://school.programmers.co.kr/learn/courses/30/lessons/131533
[프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr](https://school.programmers.co.kr/learn/courses/30/lessons/131533)
STEP 1: 원본 테이블 데이터
PRODUCT 테이블:
PRODUCT_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 | 1 | 2022-03-02
3 | 3 | 1 | 2022-05-01
4 | 2 | 1 | 2022-05-24
5 | 1 | 3 | 2022-07-14
6 | 2 | 1 | 2022-09-22
STEP 2: JOIN 결과 (GROUP BY 전)
PRODUCT_CODE | PRODUCT_ID | PRICE | SALES_AMOUNT | 개별 판매액(PRICE * SALES_AMOUNT)
A1000011 | 1 | 15000 | 2 | 30000
A1000011 | 1 | 15000 | 1 | 15000
A1000011 | 1 | 15000 | 3 | 45000
A1000045 | 2 | 8000 | 1 | 8000
A1000045 | 2 | 8000 | 1 | 8000
C3000002 | 3 | 42000 | 1 | 42000
STEP 3: GROUP BY 적용 후 최종 결과
PRODUCT_CODE | SALES (SUM of PRICE * SALES_AMOUNT)
C3000002 | 126000 (42000 * 3)
A1000011 | 90000 (15000 * 6)
A1000045 | 16000 (8000 * 2)
틀린 쿼리의 문제점:
select product_code, sales_amount * price as sales
from product p
join offline_sale o on p.product_id = o.product_id
order by sales desc, product_code asc;
이 쿼리는 STEP 2의 결과처럼 각각의 판매 기록이 개별 행으로 출력됩니다.
올바른 쿼리:
SELECT p.product_code,
SUM(o.sales_amount * p.price) as sales
FROM product p
JOIN offline_sale o ON p.product_id = o.product_id
GROUP BY p.product_code
ORDER BY sales DESC, p.product_code ASC;
이 쿼리는 STEP 3처럼 상품코드별로 총 매출액이 합산되어 출력됩니다.
각 상품별 판매 현황:
- C3000002 (42,000원)
- 총 판매량: 3개
- 총 매출액: 42,000 * 3 = 126,000원
- A1000011 (15,000원)
- 총 판매량: 6개 (2 + 1 + 3)
- 총 매출액: 15,000 * 6 = 90,000원
- A1000045 (8,000원)
- 총 판매량: 2개 (1 + 1)
- 총 매출액: 8,000 * 2 = 16,000원
이렇게 GROUP BY를 사용하면 각 상품코드별로 데이터가 집계되어 원하는 결과를 얻을 수 있습니다.
'SQL 코테' 카테고리의 다른 글
프로그래머스 자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기 // 문자열포함검사는 LIKE , 카운팅은 COUNT(*) (0) | 2023.08.06 |
---|---|
프로그래머스 조건에 맞는 사용자와 총 거래금액 조회하기 // 서브쿼리, 문자열비교는 '' (0) | 2023.08.06 |
프로그래머스 즐겨찾기가 가장 많은 식당 정보 출력하기 // GROUP BY 집계함수(MAX) 주의사항 (0) | 2023.08.06 |
프로그래머스 성분으로 구분한 아이스크림 총 주문량 // GROUP BY (0) | 2023.08.06 |
프로그래머스 없어진 기록 찾기 // LEFT JOIN VS INNER JOIN (0) | 2023.08.06 |