Post

카테고리 별 상품 개수 구하기

String, Date

카테고리 별 상품 개수 구하기


문제 설명

다음은 어느 의류 쇼핑몰에서 판매중인 상품들의 정보를 담은 PRODUCT 테이블입니다.

PRODUCT 테이블

Column nameTypeNullableDescription
PRODUCT_IDINTEGERFALSE상품 ID
PRODUCT_CODEVARCHAR(8)FALSE상품 코드
PRICEINTEGERFALSE판매가

상품 별로 중복되지 않는 8자리 상품코드 값을 가지며, 앞 2자리는 카테고리 코드를 의미합니다.


예를 들어, PRODUCT 테이블이 다음과 같다면

PRODUCT_IDPRODUCT_CODEPRICE
1A100001110000
2A10000459000
3C300000222000
4C300000615000
5C300001030000
6K100002317000

상품 카테고리 코드 별 상품은 아래와 같이 구분됩니다.

  • A1: PRODUCT_ID가 1, 2인 상품
  • C3: PRODUCT_ID가 3, 4, 5인 상품
  • K1: PRODUCT_ID가 6인 상품


따라서, SQL문을 실행하면 다음과 같은 결과가 나와야 합니다.

CATEGORYPRODUCTS
A12
C33
K11




문제

PRODUCT 테이블에서 상품 카테고리 코드(PRODUCT_CODE 앞 2자리) 별 상품 개수를 출력하는 SQL문을 작성해주세요. 결과는 상품 카테고리 코드를 기준으로 오름차순 정렬해주세요.




풀이 과정
  1. 조건 확인
    • 각 상품은 고유한 8자리 상품코드를 가지며 이 중 앞 2자리는 상품 카테고리를 의미
  2. 상품 카테고리 코드 추출
    • MySQL LEFT(PRODUCT_CODE, 2) 함수를 사용하여 상품코드의 앞 2자리를 추출하자.
  3. 그룹화 및 집계
    • 상품 카테고리 코드 추출한 것을 GROUP BY LEFT(PRODUCT_CODE, 2)를 이렇게 묶고
    • COUNT(*) 사용해서 각 그룹(카테고리) 내 상품의 개수 집계
  4. 결과 정렬
    • 정렬 기준에 따라 ORDER BY로 결과 정렬
      • ORDER BY 상품 카테고리 코드 순 오름차순 정렬
  5. 최종 결과 출력
    • SELECT 절에서 LEFT(PRODUCT_CODE, 2)를 CATEGORY로 alias, COUNT(*)를 별칭 PRODUCTS로 alias
  • 교훈
    • 문자열 함수 활용해서 원하는 데이터의 일부를 추출하고 -> GROUP BY와 집계 함수를 사용….. 하나하나 차근차근 띵킹하자………




정답

1
2
3
4
5
6
7
8
9
SELECT 
    LEFT(PRODUCT_CODE, 2) AS CATEGORY,
    COUNT(*) AS PRODUCTS
FROM 
    PRODUCT
GROUP BY 
    LEFT(PRODUCT_CODE, 2)
ORDER BY 
    CATEGORY;


Tip

상품 카테고리 코드 추출

  • MySQL : LEFT(PRODUCT_CODE, 2) 함수 사용하여 상품 코드의 앞 2자리를 추출
  • Oracle : SUBSTR(PRODUCT_CODE, 1, 2) 함수 사용하여 상품 코드의 앞 2자리를 추출

그룹화와 집계

  • GROUP BY LEFT(PRODUCT_CODE, 2)를 사용하여 추출된 카테고리 코드별로 상품을 그룹화
  • COUNT(*) 함수를 사용하여 카테고리별 각 그룹 내 상품의 개수 집계




개념 확인 (MySQL)

  • LEFT() 함수
    • LEFT(string, length) 함수는 주어진 문자열에서 왼쪽부터 지정된 길이만큼의 문자 반환
  • GROUP 함수
    • 특정 컬럼 값을 기준으로 데이터를 그룹화하여 집계 계산 수행
      • COUNT(*) : 해당 그룹의 모든 행을, COUNT(컬럼명)은 NULL이 아닌 값 개수 계산
      • ORDER BY COUNT() : COUNT로 집계된 값에 따라 결과를 정렬




카테고리 별 상품 개수 구하기

This post is licensed under Park Juyoung by the author.

Trending Tags