출처
문제
7월 아이스크림 총 주문량과 상반기의 아이스크림 총 주문량을 더한 값이 큰 순서대로 상위 3개의 맛을 조회하는 SQL 문을 작성해주세요.
문제에 대한 해석
조회: 아이스크림 맛별 상반기 주문량과 7월 주문량의 함
정렬: 주문량이 높은 상위 3개의 맛
조건: 7월 아이스크림 맛별 shipment_id가 여러개
풀이(MYSQL)
select flavor
from
(select f.flavor, (f.total_order+j.j_sales) as total
from first_half f
join (select flavor, sum(total_order) j_sales
from july
group by flavor) j
on f.flavor = j.flavor
order by 2 desc)a
limit 3
작동순서
💡SQL 실행 순서는 From -> Where -> Group by -> Having -> Select -> Order by ->결과반환
- 서브쿼리1: july테이블에서 flavor별 total_order 합을 조회한다 -> 7월달의 맛별 총 주문량: j
- 서브쿼리2: j테이블과 first_half을 flavor기준으로 inner join하고 flavor별 total_order 합을 조회하고 내림차순으로 정렬 -> 상반기 + 7월달의 맛별 총 주문량: a
- From 절: a테이블에서
- SELECT 절: flavor을 조회하는데
- ORDER BY 절: 3개까지만
다른사람 풀이
WITH BYJULY AS -- 4. BYJUL 임시테이블 작성
( SELECT * -- 2. 모든 데이터를
FROM FIRST_HALF 1. FIRST_HALF
UNION DISTINCT -- 3. 중복된 데이터를 제거하고 세로(행별)로 합하여
SELECT * -- 2. 모든데이터를
FROM JULY ) -- 1. JULY 테이블에서
SELECT FLAVOR -- 7. FLAVOR 조회
FROM BYJULY -- 5. BYJUL 임시테이블 에서
GROUP BY FLAVOR -- 6. FLAVOR별로 그룹화하여
ORDER BY SUM(TOTAL_ORDER) desc --8. TOTAL_ORDER를 합한 내림차순
LIMIT 3; -- 9. 3개까지만
select mm.flavor --3. flavor조회
from july as mm
left join first_half as mv
on mm.shipment_id = mv.shipment_id -- 1. july와 first_half를 shipment_id를 기준으로 조인
group by mm.flavor -- 2. flavor으로 그룹화
order by sum(mm.total_order + ifnull(mv.total_order, 0)) desc limit 3
-- 4. 상반기 테이블에 없는 주문량은 ifnull을 통해 0으로 바꾼 뒤 7월달 주문량과 더하여 오름차순 후 3개만
배운점
- union의 활용
- order by에서 집계함수 사용
'문제풀이 > SQL(My sql)' 카테고리의 다른 글
[문제풀이] 저자 별 카테고리 별 매출액 집계하기 (0) | 2024.01.29 |
---|---|
[문제풀이] 조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기 (0) | 2024.01.29 |
[문제풀이] 우유와 요거트가 담긴 장바구니 (0) | 2024.01.26 |
[문제풀이] 헤비 유저가 소유한 장소 (0) | 2024.01.26 |
[문제풀이] 자동차 평균 대여 기간 구하기 (1) | 2024.01.26 |