본문 바로가기

SQL Kit/GROUP BY

가격대 별 상품 개수 구하기 [ 프로그래머스 | SQL Kit | Level 2 ]

1. 문제 목적

FLOOR 함수와 GROUP BY를 활용하여 데이터 범위를 동적으로 계산하고 그룹화하는 방법을 학습하는 것이다.

숫자 데이터(PRICE)를 특정 단위(만 단위)로 그룹화하고 각 그룹별로 레코드의 개수를 계산하며 이를 정렬하여 결과를 출력하는 과정에서 숫자 기반 데이터 처리 및 집계 기술을 익히는 것을 목표로 한다.


2. 핵심 개념

FLOOR 함수

  • 정의: 숫자 값을 내림하여 가장 가까운 정수로 반환하는 함수.
FLOOR(숫자 값)
  • 특징:숫자 데이터를 특정 단위로 그룹화하거나 범위를 설정할 때 유용하다.
  • 소수점을 제거하고 정수 값으로 내림 처리한다.
FLOOR(19999 / 10000) * 10000  -- 결과: 10000

COUNT 함수

  • 정의: 특정 열 또는 레코드의 개수를 계산하는 집계 함수.
SELECT COUNT(*)
FROM 테이블명;
  • 주요 특징:특정 열을 지정할 경우, NULL이 아닌 값만 카운트.
  • COUNT(*): 모든 레코드를 계산.

GROUP BY

  • 정의: 데이터를 특정 열 값을 기준으로 그룹화하여 각 그룹별 요약 결과를 반환.
SELECT1, COUNT(*)
FROM 테이블명
GROUP BY1;

3. 문제 해결 절차

  1. 데이터 분석:
    • PRICE 열을 기준으로 상품을 만 단위로 그룹화해야 한다.
    • FLOOR 함수를 사용하여 가격을 나눈 뒤 내림 처리로 가격 그룹을 설정한다.
  2. 가격 그룹화:
    • PRICE 값을 10000으로 나눈 뒤 내림(FLOOR)하여 가격 그룹(PRICE_GROUP)을 생성한다.
    • 그룹화된 가격 그룹은 10000 단위로 표시한다.
  3. 상품 개수 계산:
    • GROUP BY를 사용하여 가격 그룹별로 데이터를 그룹화하고 COUNT 함수로 각 그룹의 상품 개수를 계산한다.
  4. 결과 정렬:
    • 가격 그룹을 기준으로 오름차순 정렬하여 결과를 출력한다.
  5. SQL 작성 및 실행:
    • 위의 요구 사항을 반영한 SQL을 작성하고 테스트한다.

4. 코드 작성

-- 가격대 별 상품 개수를 구하는 SQL
SELECT
    FLOOR(PRICE / 10000) * 10000 AS `PRICE_GROUP`,  -- PRICE를 만 단위로 그룹화
    COUNT(*) AS `PRODUCTS`                         -- 각 가격대별 상품 개수 계산
FROM
    PRODUCT                                       -- 상품 데이터를 포함한 테이블
GROUP BY
    `PRICE_GROUP`                                 -- PRICE_GROUP으로 그룹화
ORDER BY
    `PRICE_GROUP` ASC;                            -- 가격대를 기준으로 오름차순 정렬

5. 코드 분석

SELECT 절

  • FLOOR(PRICE / 10000) * 10000 AS PRICE_GROUP:예: 19999 → 10000, 23000 → 20000.
  • PRICE 값을 10000으로 나눈 뒤 내림 처리하여 만 단위 가격 그룹을 생성.
  • COUNT(*) AS PRODUCTS:
  • 각 가격 그룹에 속한 상품의 개수를 계산하여 PRODUCTS 열에 저장.

FROM 절

  • PRODUCT:
  • 상품 데이터를 포함한 테이블.

GROUP BY 절

  • PRICE_GROUP:
  • PRICE_GROUP을 기준으로 데이터를 그룹화하여 집계 함수가 적용되도록 설정.

ORDER BY 절

  • PRICE_GROUP ASC:
  • 가격 그룹을 기준으로 오름차순 정렬하여 결과를 출력.