반응형
Lv4 '주문량이 많은 아이스크림들 조회하기' 문제를 풀어보았습니다.
구체적인 프로그래머스 문제는 링크 참고 바라며, 문제는 간략히 설명합니다.
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
사용할 테이블 정보
두 테이블 모두 아이스크림 가게의 주문 정보를 담은 테이블입니다.first_half
테이블은 상반기의 아이스크림 주문 정보를 담은 테이블. (flavor 칼럼이 기본 키, shipment_id 칼럼이 july 테이블의 shipment_id의 외래 키)july
테이블은 7월의 아이스크림 주문 정보를 담은 테이블입니다.
7월에는 워낙 아이스크림 주문량이 많아서 같은 아이스크림 맛이지만, 다른 두 공장에서 아이스크림 가게로 출하를 진행하는 경우가 있습니다.
즉, 같은 맛일지라도 출하 번호가 다른 데이터가 존재합니다.
두 테이블 모두 출하 번호, 아이스크림 맛, 총 주문량 칼럼을 갖고 있다.
생각의 과정
- 두 테이블을 합쳐서 아이스크림 맛의 총 주문량을 조회해야 한다.
- 두 테이블을 JOIN 하고, 이때 ON 절에는 flavor 칼럼으로 조건을 걸어야겠다.
july
테이블은 flavor가 중복인 케이스가 있으니GROUP BY flavor
를 통해
SQL 쿼리 작성 (MySQL)
SELECT flavor
FROM (
SELECT first_half.flavor, SUM(first_half.total_order) + SUM(july.total_order) AS sum_total_order
FROM first_half
JOIN july
ON first_half.flavor = july.flavor
GROUP BY flavor
) AS total
ORDER BY sum_total_order desc
LIMIT 3
;
다른 방식의 쿼리문 (MySQL)
수정 내용
- JOIN 대상 테이블을 미리
GROUP BY
한 july 테이블을 조인 대상으로 걸었다. - 총 주문량의 합을
SELECT
대상으로 두지 않고ORDER BY
절에서만 사용하도록 했다.
SELECT j.flavor
FROM first_half
JOIN (
SELECT flavor, SUM(total_order) AS total_order
FROM july
GROUP BY flavor
) AS j
ON first_half.flavor = j.flavor
GROUP BY flavor
ORDER BY first_half.total_order + j.total_order desc
LIMIT 3;
필요한 지식
JOIN, SUM, GROUP BY, ORDER BY, LIMIT
반응형
'Algorithm & Data Structure > 문제 풀이' 카테고리의 다른 글
[SQL, 프로그래머스] 상품 별 오프라인 매출 구하기 (1) | 2024.06.09 |
---|---|
[SQL, 프로그래머스] 조건에 맞는 도서와 저자 리스트 출력하기 (1) | 2024.06.09 |
[HackerRank] SQL 문제 (0) | 2022.06.26 |
[JAVA] baekjoon 2447 별 찍기-10 (0) | 2022.06.15 |
[JAVA] baekjoon 1891 사분면 (0) | 2022.06.13 |