https://school.programmers.co.kr/learn/courses/30/lessons/131117
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
코드
SELECT p.PRODUCT_ID, p.PRODUCT_NAME, (p.PRICE * o.TOTAL_AMOUNT) TOTAL_SALES
FROM FOOD_PRODUCT p JOIN (SELECT PRODUCT_ID, SUM(AMOUNT) TOTAL_AMOUNT FROM FOOD_ORDER WHERE PRODUCE_DATE LIKE '2022-05%' GROUP BY PRODUCT_ID) o ON p.PRODUCT_ID = o.PRODUCT_ID
ORDER BY TOTAL_SALES DESC, p.PRODUCT_ID
쿼리 실행 순서
실행 순서 | SQL 절 (Clause) | 설명 |
1 | FROM (FOOD_ORDER) | FOOD_ORDER 테이블에서 데이터를 가져옴 |
2 | WHERE (PRODUCE_DATE LIKE '2022-05%') | PRODUCE_DATE가 '2022-05'로 시작하는 데이터 필터링 |
3 | GROUP BY (PRODUCT_ID) | PRODUCT_ID별로 SUM(AMOUNT)을 계산하여 TOTAL_AMOUNT라는 별칭으로 저장 |
4 | 서브쿼리 완료 | PRODUCT_ID별 TOTAL_AMOUNT를 반환하는 서브쿼리 결과 생성 |
5 | JOIN (FOOD_PRODUCT 테이블과 서브쿼리 결과) | FOOD_PRODUCT 테이블과 서브쿼리를 PRODUCT_ID 기준으로 조인 |
6 | SELECT | PRODUCT_ID, PRODUCT_NAME, (PRICE * TOTAL_AMOUNT) AS TOTAL_SALES 선택 |
7 | ORDER BY | TOTAL_SALES DESC(총 매출 기준 내림차순), 동일한 경우 PRODUCT_ID 기준 정렬 |
우선은 FOOD_ORDER 테이블에 있는 중복된 PRODUCT_ID가 존재하기에 GROUP BY로 선택한 다음에 총 AMOUNT를 계산해주었습니다. 그리고 ‘2022-05%’로 2022년 5월 이외의 데이터를 필터링하였습니다.
이후 FOOD_PRODUCT 테이블과 PRODUCT_ID를 기준으로 JOIN 하였습니다.
이후 모든 행이 주어져있기에 원하는 컬럼만 출력하면 됩니다.
'프로그래머스' 카테고리의 다른 글
[프로그래머스 SQL] 잡은 물고기의 평균 길이 구하기 - 쿼리 실행 순서와 함께 보자 (0) | 2025.03.03 |
---|---|
[프로그래머스 SQL] ROOT 아이템 구하기 - 쿼리 실행 순서와 함께 보자 (0) | 2025.03.03 |
[프로그래머스 SQL] 주문량이 많은 아이스크림들 조회하기 - 쿼리 실행 순서와 함께 보자 (0) | 2025.03.03 |
[프로그래머스 SQL] 조건에 맞는 도서와 저자 리스트 출력하기 - 쿼리 실행 순서와 함께 보자 (0) | 2025.03.03 |
[프로그래머스 SQL] 없어진 기록 찾기 - 쿼리 실행 순서와 함께 보자 (0) | 2025.03.03 |