습득한 점:
이제 Lv 4 문제도 3문제정도 밖에 남지 않아서, 벌써부터 난이도가 쉬워지고 있다.
그동안 5 난이도 부터 역순으로 문제풀어서, 3 난이도 문제 차례인데, 정답률 80%이하 인 것들만 풀어야 할듯 하다.
더불어, 윈도우 함수(LEAD, LAG, RANK, DENSE_RANK, ROW_NUMBER 등등) 혹은 사용자 정의 함수를 활용하는 문제가
프로그래머스에는 없는 듯해서, 3 난이도를 다 풀고나면 리트코드나 해커랭크 문제를 풀어야 할 것 같다.
아니면 Data Camp 라는 곳도 알아봐야겠다. (유료라 들었는데)
문제:
FOOD_PRODUCT와 FOOD_ORDER 테이블에서
생산일자가 2022년 5월인 식품들의 식품 ID, 식품 이름, 총매출을 조회하는 쿼리 작성
결과는 총매출을 기준으로 내림차순 정렬,
총매출이 같다면 식품 ID를 기준으로 오름차순 정렬
문제파악:
Product 테이블은 총 데이터 row 갯수가 40줄
Order 테이블은 총 데이터 row 갯구가 30줄 이었다.
Product 테이블의 상품 id가 고유값으로 적힌 테이블이라,
Order 테이블이 데이터 row 수가 더 많을 줄 알았는데, 아니었다.
따라서 전체 상품 중 일부 상품만 있는 경우 + 그 일부의 상품 중 상품 id값의 중복인 데이터가 있는 경우
이 2가지만 고려해서 문제를 풀면 된다.
LEFT 조인이 필요한 상황은 아니다.
INNER 조인 후, 2022년 5월의 데이터만 WHERE 조건에 넣고, 총 매출을 계산하는 "TOTAL_SALES" 컬럼을 새로 추가한다.
여기까지 작성 후, 코드를 실행하면 상품id가 중복되는 데이터 row가 존재 할 수 있는 결과값이 나온다.
문제에서 원하는 값은 상품 id가 중복되는 데이터들은 총 매출액을 합산해야 한다.
예를 들어,
5월 10일에 참치캔 총 매출액이 350,000원이고, 5월 21일에 참치캔 총 매출액이 200,000원 이라면
결과값으로 나와야 하는 5월의 참치캔 총 매출액은 550,000원으로 계산되어야 하는 식이다.
고로 GROUP BY로 PRODUCT_ID를 묶어주고, 이에 대한 합산을 위해
PRICE*AMOUNT를 SUM으로 감싸준다.
PRICE*AMOUNT AS TOTAL_SALES
>>> SUM(PRICE*AMOUNT) AS TOTAL_SALES
정렬조건은 문제에 쓰여진 그대로 기재하면 된다.
풀이:
SELECT FP.PRODUCT_ID
, FP.PRODUCT_NAME
, SUM(PRICE*AMOUNT) AS TOTAL_SALES
FROM FOOD_PRODUCT AS FP
INNER JOIN FOOD_ORDER AS FO ON FP.PRODUCT_ID = FO.PRODUCT_ID
WHERE PRODUCE_DATE LIKE '2022-05%'
GROUP BY PRODUCT_ID
ORDER BY TOTAL_SALES DESC
, PRODUCT_ID ASC
'sql > easy' 카테고리의 다른 글
프로그래머스 Lv 4 - 식품분류별 가장 비싼 식품의 정보 조회하기 (0) | 2023.08.16 |
---|---|
프로그래머스 Lv 3 - 조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기 (0) | 2023.07.19 |
프로그래머스 Lv 4 - 서울에 위치한 식당 목록 출력하기 (0) | 2023.07.14 |
프로그래머스 Lv 4 - 년, 월, 성별 별 상품 구매 회원 수 구하기 (0) | 2023.07.14 |
프로그래머스 Lv 4 - 주문량이 많은 아이스크림들 조회하기 (0) | 2023.07.10 |