
다음은 어느 의류 쇼핑몰에서 판매중인 상품들의 정보를 담은 PRODUCT 테이블입니다. PRODUCT 테이블은 아래와 같은 구조로 되어있으며, PRODUCT_ID, PRODUCT_CODE, PRICE는 각각 상품 ID, 상품코드, 판매가를 나타냅니다.
| Column name | Type | Nullable |
|---|---|---|
| PRODUCT_ID | INTEGER | FALSE |
| PRODUCT_CODE | VARCHAR(8) | FALSE |
| PRICE | INTEGER | FALSE |
상품 별로 중복되지 않는 8자리 상품코드 값을 가지며, 앞 2자리는 카테고리 코드를 의미합니다.
PRODUCT 테이블에서 상품 카테고리 코드(PRODUCT_CODE 앞 2자리) 별 상품 개수를 출력하는 SQL문을 작성해주세요. 결과는 상품 카테고리 코드를 기준으로 오름차순 정렬해주세요.
이 문제에서 요구하는 카테고리는 PRODUCT_CODE의 앞 2자리에 나타나 있으므로 LEFT() 함수를 사용하여 문자열의 왼쪽부터 원하는 길이까지 구할 수 있다.
우선 PRODUCT_CODE의 앞 두자리를 추출한 후, 이를 바탕으로 그룹을 만든다.
이후, COUNT() 함수를 사용하여 해당 그룹에 속하는 상품의 개수를 세주면 된다.
SUBSTRING(문자열, 시작위치, 길이): 문자열을 시작위치부터 길이만큼 자른다.
ex.SUBSTRING('PYTHON', 2, 3) == 'YTH'
LEFT(문자열, 길이): 문자열을 왼쪽부터 길이만큼 자른다.
ex.LEFT('PYTHON', 4) == 'PYTH'
RIGHT(문자열, 길이): 문자열을 오른쪽부터 길이만큼 자른다.
ex.RIGHT('PYTHON', 5) == 'YTHON'
SELECT LEFT(PRODUCT_CODE, 2) AS CATEGORY
,COUNT(*) AS PRODUCTS
FROM PRODUCT
GROUP
BY CATEGORY
ORDER
BY CATEGORY ASC;
문자열 함수와 GROUP BY 를 사용하는 조금 고민이 필요한 문제였다.
https://school.programmers.co.kr/learn/courses/30/lessons/131529