[프로그래머스] LEVEL4 주문량이 많은 아이스크림들 조회하기(SQL)

Loopy·2023년 10월 21일
1

프로그래머스

목록 보기
32/32
post-thumbnail

[프로그래머스] LEVEL4 주문량이 많은 아이스크림들 조회하기


🧐 문제 설명


😍 나의 풀이

FIRST_HALF 테이블은 상반기 아이스크림 주문 정보를 담고 있고, JULY 테이블은 7월 아이스크림 주문 정보를 담고 있습니다.

구해야 할 문제는 7월 아이스크림 총 주문량과 상반기 아이스크림 주문량의 합이 높은 순서대로 3개를 출력하는 것입니다. 친절하게 FIRST_HALF 테이블의 기본키이자 JULY 테이블의 외래키가 FLAVOR라고 알려주었기 때문에 LEFT JOIN을 이용하여 두 테이블을 조인했습니다.


간단한 문제처럼 보이지만, 이 문제에서는 한 가지 실수하기 쉬운 조건이 있습니다.

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

JOIN된 테이블의 데이터를 조회해보니 아래와 같이 7월에는 JULY 테이블의 SHIPMENT_ID가 109, 209로 다른 2가지의 주문 데이터가 존재했습니다.

그래서, 맛을 기준으로 GROUP BY 그룹화하고 나서, 상반기 아이스크림 주문량(FIRST_HALF.TOTAL_ORDER)과 7월 아이스크림 주문량(JULY.TOTAL_ORDER)의 합을 계산할 때 JULY 테이블은 1가지 이상의 주문 데이터가 있을 수 있으니 SUM을 이용했습니다.

또한, 주문량의 합 상위 3개의 데이터를 출력해야하므로 내림차순 정렬과 LIMIT을 이용했습니다.

정답 풀이

SELECT FIRST_HALF.FLAVOR
FROM FIRST_HALF
    LEFT JOIN JULY
    ON FIRST_HALF.FLAVOR = JULY.FLAVOR
GROUP BY FIRST_HALF.FLAVOR
ORDER BY (FIRST_HALF.TOTAL_ORDER + SUM(JULY.TOTAL_ORDER)) DESC
LIMIT 3;

🥇 Today I Learn

LIMIT

ORDER BY와 LIMIT를 이용해서 특정 기준으로 결과를 출력할 수 있습니다. 예를 들어, 급여(salary)가 높은 순서대로 상위 10명을 뽑을 수 있습니다.

SELECT *
FROM 테이블명
ORDER BY 컬럼명 DESC
LIMIT 10;

LIMIT OFFSET

LIMIT은 출력할 행의 수, OFFSET은 몇 번째 행부터 출력할 지입니다. 1번째 row면 OFFSET은 0입니다.

예를 들어, 아래 코드는 LIMIT 3 OFFSET 5이므로 6번째 행부터 3개의 행을 출력합니다. 테이블에서는 6 ~ 8번째 행을 출력합니다.

SELECT *
FROM 테이블명
ORDER BY 컬럼명 DESC
LIMIT 3 OFFSET 5;

LIMIT 숫자1, 숫자2

LIMIT 다음에 오는 숫자1은 몇번째 행부터 출력할 지, 숫자2는 출력할 행의 수입니다.

예를 들어, 아래 코드는 LIMIT 5, 3이므로 6번째 행부터 3개의 행을 출력합니다. 테이블에서는 6 ~ 8번째 행을 출력합니다.

SELECT *
FROM 테이블명
ORDER BY 컬럼명 DESC
LIMIT 5, 3;

profile
공부 쫌 해!!!😂

0개의 댓글