[programmers] SQL Lv. 4 - 주문량이 많은 아이스크림들 조회하기

2025. 1. 10. 14:06·Algorithm Solving/SQL

https://school.programmers.co.kr/learn/courses/30/lessons/133027

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

문제
7월 아이스크림 총 주문량과 상반기의 아이스크림 총 주문량을 더한 값이 큰 순서대로 상위 3개의 맛을 조회하는 SQL 문을 작성해주세요.

 


풀이

틀린 풀이 😿

SELECT SUB.FLAVOR 
FROM 
(
    SELECT 
        J.FLAVOR,
        (J.TOTAL_ORDER + IFNULL(F.TOTAL_ORDER, 0)) AS SUMTOTAL
    FROM JULY J
    LEFT JOIN FIRST_HALF F ON F.SHIPMENT_ID = J.SHIPMENT_ID
    ORDER BY SUMTOTAL DESC
) SUB
LIMIT 3

틀린 이유:

"7월에는 아이스크림 주문량이 많아 같은 아이스크림에 대하여 서로 다른 두 공장에서 아이스크림 가게로 출하를 진행하는 경우가 있습니다. 이 경우 같은 맛의 아이스크림이라도 다른 출하 번호를 갖게 됩니다."

이 조건을 고려를 안하고 풀이..

출하 번호(`SHIPMENT_ID`)가 달라도 같은 맛(`FLAVOR`)일 경우 주문량은 합산해야 함!

 


GROUP BY - 7월 주문량 합산

SELECT FLAVOR, SUM(TOTAL_ORDER) AS JULY_TOTAL_ORDER
FROM JULY 
GROUP BY FLAVOR
  • `JULY` 테이블에서 같은 맛(`FLAVOR`)을 기준으로 주문량(`TOTAL_ORDER`)을 합산
  • 서로 다른 출하 번호(`SHIPMENT_ID`)라도 같은 맛의 아이스크림 주문량은 하나로 합산하여 `JULY_TOTAL_ORDER`로 출력

 


JOIN - 7월 주문량과 상반기 주문량 결합

SELECT *
FROM 
(
    SELECT FLAVOR, SUM(TOTAL_ORDER) AS JULY_TOTAL_ORDER
    FROM JULY 
    GROUP BY FLAVOR
) J
LEFT JOIN FIRST_HALF F ON F.FLAVOR = J.FLAVOR
  • 7월 주문량(`J`)과 상반기 주문량(`FIRST_HALF`)을 `FLAVOR`을 기준으로 JOIN한다.
    • 위의 "틀린 풀이"에서는 `JULY`테이블에는 있고 `FIRST_HALF`테이블에는 없는 `SHIPMENT_ID`를 고려해서 `LEFT JOIN`을 했지만
    • 현재는 `FLAVOR`로 결합하기 때문에 `LEFT JOIN`이 아닌 `JOIN`으로 결합해도 된다.
    • `LEFT JOIN`, `JOIN` 둘 다 조건에 맞다!
      (7월에만 존재하는 맛이 있었다면 `LEFT JOIN`만 맞음)
      (해당 문제에서는, 출하 번호만 차이가 있고 맛의 종류에는 차이가 없어서 `JOIN`도 맞음)

 


IFNULL - 총 주문량 계산

SELECT
    J.FLAVOR,
    IFNULL(J.JULY_TOTAL_ORDER, 0) + IFNULL(F.TOTAL_ORDER, 0) AS TOTAL_ORDER
FROM 
	-- 생략
  • 상반기 주문량과 7월 주문량의 합계를 계산
  • `IFNULL` 함수를 이용해서 `NULL`일 경우 `0`을 대입해서 계산되도록 한다.
  • 그런데, 위의 설명과 마찬가지로 `JULY`테이블과 `FIRST_HALF`테이블의 맛의 종류에는 차이가 없고,
    모든 컬럼이 `NULLABLE` `FALSE`이기 때문에, `IFNULL`없이 계산해도 조건에 맞는다.

 


LIMIT - 상위 3개 추출

SELECT *
FROM
	-- 생략
ORDER BY TOTAL_ORDER DESC
LIMIT 3
  • 위에서 만든 쿼리를 서브쿼리로 묶고 ORDER BY, LIMIT를 사용하면 주문량이 많은 순으로 3개 나열된다.

 


제출

-- 코드를 입력하세요
SELECT SUB.FLAVOR
FROM 
(
    SELECT
        J.FLAVOR,
        IFNULL(J.JULY_TOTAL_ORDER, 0) + IFNULL(F.TOTAL_ORDER, 0) AS TOTAL_ORDER
    FROM 
    (
        SELECT FLAVOR, SUM(TOTAL_ORDER) AS JULY_TOTAL_ORDER
        FROM JULY 
        GROUP BY FLAVOR
    ) J
    LEFT JOIN FIRST_HALF F ON F.FLAVOR = J.FLAVOR
) SUB
ORDER BY TOTAL_ORDER DESC
LIMIT 3

 

또는

SELECT SUB.FLAVOR
FROM 
(
    SELECT
        J.FLAVOR,
        J.JULY_TOTAL_ORDER + F.TOTAL_ORDER AS TOTAL_ORDER
    FROM 
    (
        SELECT FLAVOR, SUM(TOTAL_ORDER) AS JULY_TOTAL_ORDER
        FROM JULY 
        GROUP BY FLAVOR
    ) J
    JOIN FIRST_HALF F ON F.FLAVOR = J.FLAVOR
) SUB
ORDER BY TOTAL_ORDER DESC
LIMIT 3
저작자표시 비영리 변경금지 (새창열림)

'Algorithm Solving > SQL' 카테고리의 다른 글

[programmers] SQL Lv. 3 - 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기  (0) 2025.01.14
[programmers] SQL Lv. 4 - 저자 별 카테고리 별 매출액 집계하기  (0) 2025.01.13
[programmers] SQL Lv. 3 - 조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기  (0) 2025.01.09
[programmers] SQL Lv. 4 - 우유와 요거트가 담긴 장바구니  (1) 2025.01.08
[programmers] SQL Lv. 1 - 과일로 만든 아이스크림 고르기  (1) 2025.01.08
'Algorithm Solving/SQL' 카테고리의 다른 글
  • [programmers] SQL Lv. 3 - 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기
  • [programmers] SQL Lv. 4 - 저자 별 카테고리 별 매출액 집계하기
  • [programmers] SQL Lv. 3 - 조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기
  • [programmers] SQL Lv. 4 - 우유와 요거트가 담긴 장바구니
기만나🐸
기만나🐸
공부한 내용을 기록합시다 🔥🔥🔥
  • 기만나🐸
    기만나의 공부 기록 🤓
    기만나🐸
  • 전체
    오늘
    어제
    • ALL (147)
      • TIL (Today I Learned) (56)
      • Dev Projects (15)
      • Algorithm Solving (67)
        • Java (52)
        • SQL (15)
      • Certifications (8)
        • 정보처리기사 실기 (8)
  • 인기 글

  • 태그

    java
    그리디
    jpa
    programmers
    프로그래머스
    Subquery
    백준
    Google Fonts
    websocket
    자료구조
    javascript
    CSS
    bootstrap
    jQuery
    완전탐색
    시뮬레이션
    mysql
    BOJ
    다이나믹프로그래밍
    HTML
    BFS
    join
    Firebase
    jwt
    DFS
    greedy
    dp
    sql
    GROUP BY
    백트래킹
  • 최근 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
기만나🐸
[programmers] SQL Lv. 4 - 주문량이 많은 아이스크림들 조회하기
상단으로

티스토리툴바