[SQL] 주문량이 많은 아이스크림들 조회하기

iinnuyh_s·2024년 1월 12일
0

SQL

목록 보기
13/17
post-thumbnail
post-custom-banner

주문량이 많은 아이스크림들 조회하기

풀이

  • FLAVOR 테이블과 FIRST_HALF 두개의 테이블이 주어지고, 두 테이블 각각의 총 주문량을 더한 값이 가장 큰 상위 3개 구해오기
  • JOIN 3 번 써서 구함
    1) JULY_SUM 먼저 FLAVOR 로 GROUP BY 하고, SUM(TOTAL_ORDER) 로 맛별 7월 주문량 구함
    2) FIRST_HALF 랑 1번 JOIN 해서 각각의 맛별, SUM(상반기 주문량+7월주문량) 구함
    - TOP 3 구하는 거니까 ORDER 총주문량 DESC --> LIMIT 3
    3) 결과로 TOP 3에 드는 맛을 골라야 하니까 FIRST_HALF 랑 2랑 다시 JOIN, FLAVOR 같은 애들 뽑아서 결과 출력
🙆‍♀️ 정답풀이
SELECT B.FLAVOR
FROM FIRST_HALF B
JOIN (
    SELECT F.FLAVOR,SUM(F.TOTAL_ORDER+A.JULY_SUM) TOTAL
    FROM FIRST_HALF F
    JOIN (
    SELECT FLAVOR,SUM(TOTAL_ORDER) JULY_SUM
    FROM JULY
    GROUP BY FLAVOR
) A
ON F.FLAVOR=A.FLAVOR
GROUP BY F.FLAVOR
ORDER BY TOTAL DESC
LIMIT 3
) AS C
ON B.FLAVOR=C.FLAVOR;

참고: UNION ALL 사용한 풀이

SELECT FLAVOR 
FROM (
  SELECT *
  FROM FIRST_HALF 
  UNION ALL
  SELECT *
  FROM JULY) ICECREAM
GROUP BY FLAVOR
ORDER BY SUM(TOTAL_ORDER) DESC LIMIT 3
  • UNION ALL 사용할 수 있는 이유:
    두 테이블의 컬럼명, 타입이 똑같음.
    업로드중..
  • UNION ALL 은 수평 결합, JOIN은 수직결합이다. 그니까 JOIN은 컬럼들이 합쳐진다 생각하면 되고 UNION ALL은 레코드들이 합쳐진다
  • SELECT * FROM FIRST_HALF UNION ALL SELECT * FROM JULY : 이 결과로 모든 레코드들이 포함된 테이블이 만들어지고, 여기서 바로 FLAVOR로 그룹핑 한담에 SUM(총주문량)으로 내림차순 정렬, LIMIT 3 으로 TOP 3 뽑으면 끝.
  • 만약 테이블 구조가 위처럼 완전히 똑같으면 UNION ALL 생각해보기 !!
post-custom-banner

0개의 댓글