해당 문제는 Programmers에서 사용한 문제이며 모든 테이블의 자료와 출처는 Programmers임을 밝힙니다.
해당 글에서는 WITH, GROUP BY, JOIN을 이용하여 푸는 문제로 초보자가 하기에는 보통 정도의 난이도를 가지고 있는 것 같습니다.
해당 문제 원본을 확인 하시려면 해당 사이트를 들어가시면 될 것 같습니다.
시작하겠습니다.
FOOD_PRODUCT와 FOOD_ORDER 테이블에서 생산일자가 2022년 5월인 식품들의 식품 ID, 식품 이름, 총매출을 조회하는 SQL문을 작성해주세요. 이때 결과는 총매출을 기준으로 내림차순 정렬해주시고 총매출이 같다면 식품 ID를 기준으로 오름차순 정렬해주세요.
해당 문제는 매우 간단합니다. 2022년 5월의 판매한 식품 별로 묶은 후 몇 개 팔렸는지 구한 다음에 판매한 개수 * 가격을 해주면 됩니다.
이렇게 총 매출을 구해주면 되는 문제입니다.
1. 식품별 판매한 개수 구하기
WITH CTE AS (SELECT p.PRODUCT_ID
, SUM(o.AMOUNT) AS TOTAL_AMOUNT
FROM FOOD_PRODUCT p
JOIN
FOOD_ORDER o ON p.PRODUCT_ID = o.PRODUCT_ID
WHERE DATE_FORMAT(o.PRODUCE_DATE, '%Y-%m') = '2022-05'
GROUP BY p.PRODUCT_ID)
저는 해당 쿼리를 한번 더 사용하고 가독성이 좋게 하기 위해 WITH 절로 만들어주었습니다.
그리고 위의 이미지와 같이 2022년 5월에 팔린 제품의 개수를 출력하는 것을 확인 할 수 있습니다.
이제 해당 개수와 가격을 곱해주면 최종적으로 원하는 결과가 나오게 될 것입니다.
2. CTE테이블과 결합하기
WITH CTE AS (SELECT p.PRODUCT_ID
, SUM(o.AMOUNT) AS TOTAL_AMOUNT
FROM FOOD_PRODUCT p
JOIN
FOOD_ORDER o ON p.PRODUCT_ID = o.PRODUCT_ID
WHERE DATE_FORMAT(o.PRODUCE_DATE, '%Y-%m') = '2022-05'
GROUP BY p.PRODUCT_ID)
SELECT *
FROM FOOD_PRODUCT a
JOIN
CTE b ON a.PRODUCT_ID = b.PRODUCT_ID
해당 쿼리를 사용하시면 product_ID와 일치하는 가격을 위의 이미지와 같이 얻을 수 있게 됩니다.
이제 해당 테이블에서 계산만 해주면 되는 것입니다.
3. PRICE 와 TOTAL_AMOUNT 곱해주기
WITH CTE AS (SELECT p.PRODUCT_ID
, SUM(o.AMOUNT) AS TOTAL_AMOUNT
FROM FOOD_PRODUCT p
JOIN
FOOD_ORDER o ON p.PRODUCT_ID = o.PRODUCT_ID
WHERE DATE_FORMAT(o.PRODUCE_DATE, '%Y-%m') = '2022-05'
GROUP BY p.PRODUCT_ID)
SELECT a.PRODUCT_ID
, a.PRODUCT_NAME
, b.TOTAL_AMOUNT * a.PRICE AS TOTAL_SALES
FROM FOOD_PRODUCT a
JOIN
CTE b ON a.PRODUCT_ID = b.PRODUCT_ID
ORDER BY TOTAL_SALES DESC, a.PRODUCT_ID ASC
이렇게 두 개의 값(TOTAL_AMOUNT, PRICE)을 곱해주게 되면 저희가 원하는 값을 쉽게 구할 수 있게 되는 것입니다.
그리고 문제 조건에서 요구하는 컬럼을 설정하고 조건에 맞게 정렬을 해주시면 해당 코드는 정답이 됩니다.
이상으로 Programmers 문제 풀이를 마치도록 하겠습니다.
728x90
'Data Analyst > SQL' 카테고리의 다른 글
[SQL] Programmers 문제 풀기(자동차 대여 기록 별 대여 금액 구하기) (1) | 2024.11.14 |
---|---|
[SQL] Programmers 문제 풀기(5월 식품들의 총매출 조회하기) (3) | 2024.11.13 |
[SQL] Programmers 문제 풀기(상품을 구매한 회원 비율 구하기) (0) | 2024.11.11 |
[SQL] Programmers 문제 풀기(자동차 대여 기록에서 장기/단기 대여 구분하기) (1) | 2024.11.10 |
[SQL] Programmers 문제 풀기(특정 기간동안 대여 가능한 자동차들의 대여비용 구하기) (0) | 2024.11.07 |