Problem Solving/프로그래머스

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

LeeJaeJun 2024. 2. 21. 11:28
728x90
반응형

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

정답 코드
SELECT FIRST_HALF.FLAVOR
FROM FIRST_HALF 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;
SELECT FLAVOR
FROM (
    SELECT FLAVOR, TOTAL_ORDER
    FROM FIRST_HALF
    UNION ALL
    SELECT FLAVOR, TOTAL_ORDER
    FROM JULY
)a # derived table은 alias가 있어야 한다
GROUP BY FLAVOR
ORDER BY SUM(a.TOTAL_ORDER) DESC
LIMIT 3;
  1. UNION:
    • UNION은 두 개 이상의 SELECT 문의 결과를 결합하여 하나의 결과 집합으로 만드는 집합 연산자입니다.
    • 각 SELECT 문은 동일한 열 수와 동일한 데이터 유형을 가져야 합니다.
    • 중복된 행을 제거하여 결과에는 고유한 행만 포함됩니다.
    • 보통, UNION은 서로 다른 테이블 또는 쿼리 결과를 결합하여 단일 결과 집합을 생성하는 데 사용됩니다.
  2. JOIN:
    • JOIN은 두 개 이상의 테이블에서 데이터를 결합하여 새로운 결과 집합을 생성하는 데 사용됩니다.
    • 각 테이블은 일반적으로 특정 열(키 열)을 공유하며, 이를 기반으로 데이터가 결합됩니다.
    • JOIN은 INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN 등 다양한 유형이 있습니다. 각 JOIN 유형에 따라 결합되는 방식이 다릅니다.
    • JOIN을 사용하면 테이블 간의 관계를 사용하여 연관된 데이터를 검색하거나 결합할 수 있습니다.
WITH J as (
    select FLAVOR, SUM(TOTAL_ORDER) as TOTAL_ORDER
    from JULY
    group by FLAVOR
),
H as (
    select FLAVOR, SUM(TOTAL_ORDER) as TOTAL_ORDER
    from FIRST_HALF
    group by FLAVOR
)

SELECT FLAVOR
FROM H join J using(FLAVOR)
ORDER BY (H.TOTAL_ORDER + J.TOTAL_ORDER) desc
LIMIT 3;

/*
FROM H JOIN J USING (FLAVOR)은 
FROM H JOIN J ON H.FLAVOR = J.FLAVOR와 같은 의미를 갖습니다.
*/
728x90
반응형