카테고리 별 상품 개수 구하기
String, Date
카테고리 별 상품 개수 구하기
문제 설명
다음은 어느 의류 쇼핑몰에서 판매중인 상품들의 정보를 담은 PRODUCT 테이블입니다.
PRODUCT 테이블
Column name | Type | Nullable | Description |
---|---|---|---|
PRODUCT_ID | INTEGER | FALSE | 상품 ID |
PRODUCT_CODE | VARCHAR(8) | FALSE | 상품 코드 |
PRICE | INTEGER | FALSE | 판매가 |
상품 별로 중복되지 않는 8자리 상품코드 값을 가지며, 앞 2자리는 카테고리 코드를 의미합니다.
예를 들어, PRODUCT 테이블이 다음과 같다면
PRODUCT_ID | PRODUCT_CODE | PRICE |
---|---|---|
1 | A1000011 | 10000 |
2 | A1000045 | 9000 |
3 | C3000002 | 22000 |
4 | C3000006 | 15000 |
5 | C3000010 | 30000 |
6 | K1000023 | 17000 |
상품 카테고리 코드 별 상품은 아래와 같이 구분됩니다.
- A1: PRODUCT_ID가 1, 2인 상품
- C3: PRODUCT_ID가 3, 4, 5인 상품
- K1: PRODUCT_ID가 6인 상품
따라서, SQL문을 실행하면 다음과 같은 결과가 나와야 합니다.
CATEGORY | PRODUCTS |
---|---|
A1 | 2 |
C3 | 3 |
K1 | 1 |
문제
PRODUCT 테이블에서 상품 카테고리 코드(PRODUCT_CODE 앞 2자리) 별 상품 개수를 출력하는 SQL문을 작성해주세요. 결과는 상품 카테고리 코드를 기준으로 오름차순 정렬해주세요.
풀이 과정
- 조건 확인
- 각 상품은 고유한 8자리 상품코드를 가지며 이 중 앞 2자리는 상품 카테고리를 의미
- 상품 카테고리 코드 추출
- MySQL LEFT(
PRODUCT_CODE
, 2) 함수를 사용하여 상품코드의 앞 2자리를 추출하자.
- MySQL LEFT(
- 그룹화 및 집계
- 상품 카테고리 코드 추출한 것을 GROUP BY LEFT(
PRODUCT_CODE
, 2)를 이렇게 묶고 - COUNT(*) 사용해서 각 그룹(카테고리) 내 상품의 개수 집계
- 상품 카테고리 코드 추출한 것을 GROUP BY LEFT(
- 결과 정렬
- 정렬 기준에 따라 ORDER BY로 결과 정렬
- ORDER BY 상품 카테고리 코드 순 오름차순 정렬
- 정렬 기준에 따라 ORDER BY로 결과 정렬
- 최종 결과 출력
- SELECT 절에서 LEFT(
PRODUCT_CODE
, 2)를 CATEGORY로 alias, COUNT(*)를 별칭 PRODUCTS로 alias
- SELECT 절에서 LEFT(
- 교훈
- 문자열 함수 활용해서 원하는 데이터의 일부를 추출하고 -> 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로 집계된 값에 따라 결과를 정렬
Useful link
This post is licensed under Park Juyoung by the author.