본문 바로가기

SQL Kit/GROUP BY

성분으로 구분한 아이스크림 총 주문량 [ 프로그래머스 | SQL Kit | Level 2 ]

1. 문제목적

JOINGROUP BY, 집계 함수(SUM)를 활용하여 두 테이블 간 데이터를 결합하고 특정 그룹 기준으로 집계 연산을 수행하는 방법을 학습하는 것이다. ORDER BY를 통해 결과를 정렬하고 원하는 순서로 데이터를 출력하는 과정도 포함된다.


2. 핵심개념

JOIN

  • 정의: 두 개 이상의 테이블을 특정 공통 키를 기준으로 결합하여 데이터를 조회하는 연산.
SELECT table1.column1, table2.column2
FROM table1
JOIN table2
ON table1.common_column = table2.common_column;

GROUP BY

  • 정의: 데이터를 특정 컬럼 기준으로 그룹화하여 집계 연산을 수행할 수 있도록 하는 절.
SELECT column, SUM(value)
FROM table
GROUP BY column;

SUM

  • 정의: 특정 컬럼의 값을 모두 더하는 집계 함수.
SELECT SUM(column) FROM table;

ORDER BY

  • 정의: 결과 데이터를 특정 컬럼 기준으로 정렬.
SELECT * FROM table
ORDER BY column ASC; -- 오름차순
ORDER BY column DESC; -- 내림차순

3. 문제해결 절차

  1. 데이터 분석
    • FIRST_HALF 테이블: 아이스크림의 맛(FLAVOR), 총 주문량(TOTAL_ORDER)을 포함.
    • ICECREAM_INFO 테이블: 각 맛의 성분(INGREDIENT_TYPE) 정보를 포함.
    • 이 두 테이블을 FLAVOR를 기준으로 결합해야 한다.
  2. 그룹화 및 집계
    • 각 성분 유형(INGREDIENT_TYPE)을 기준으로 그룹화하고, 총 주문량(TOTAL_ORDER)을 계산한다.
  3. 정렬
    • 총 주문량을 기준으로 오름차순 정렬하여 결과를 출력한다.

4. 코드작성

-- 성분 유형별 총 주문량을 계산하고 정렬
SELECT
    I.INGREDIENT_TYPE,                  -- 성분 유형
    SUM(F.TOTAL_ORDER) AS TOTAL_ORDER  -- 각 성분 유형별 총 주문량
FROM
    FIRST_HALF AS F                    -- FIRST_HALF 테이블을 F로 별칭 지정
JOIN
    ICECREAM_INFO AS I                 -- ICECREAM_INFO 테이블을 I로 별칭 지정
ON
    F.FLAVOR = I.FLAVOR                -- FLAVOR를 기준으로 두 테이블 결합
GROUP BY
    I.INGREDIENT_TYPE                  -- 성분 유형별로 그룹화
ORDER BY
    TOTAL_ORDER ASC;                   -- 총 주문량 기준 오름차순 정렬

5. 코드분석

SELECT

  • I.INGREDIENT_TYPE: 성분 유형을 출력.
  • SUM(F.TOTAL_ORDER) AS TOTAL_ORDER: 각 성분 유형별 총 주문량을 계산하고 TOTAL_ORDER라는 별칭으로 출력.

FROM과 JOIN

  • FIRST_HALF AS F: 아이스크림 맛과 주문량이 있는 테이블.
  • ICECREAM_INFO AS I: 아이스크림 맛과 성분 정보가 있는 테이블.
  • ON F.FLAVOR = I.FLAVOR: 두 테이블을 FLAVOR를 기준으로 조인.

GROUP BY

  • I.INGREDIENT_TYPE: 성분 유형별로 데이터를 그룹화하여 집계 연산 수행.

ORDER BY

  • TOTAL_ORDER ASC: 총 주문량을 기준으로 오름차순 정렬.