CODING TEST/MySQL
Lv2 - 카테고리 별 상품 개수 구하기
iamyuunzo
2025. 7. 20. 12:19
📌 문제 정보
- 문제 이름 : 프로그래머스 - (String, Date) 카테고리 별 상품 개수 구하기
- 문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/131529
📌 문제 요약
- PRODUCT 테이블 : PRODUCT_ID (상품 ID), PRODUCT_CODE (상품코드), PRICE (판매가)
- PRODUCT 테이블에서 상품 카테고리 코드(PRODUCT_CODE 앞 2자리) 별 상품 개수를 출력하는 SQL문을 작성해주세요. 결과는 상품 카테고리 코드를 기준으로 오름차순 정렬해주세요.
예시)
| 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 인 상품
출력)
| CATEGORY | PRODUCTS |
| A1 | 2 |
| C3 | 3 |
| K1 | 1 |
📌 내 풀이 및 코드
SELECT LEFT(PRODUCT_CODE, 2) AS CATEGORY,
COUNT(*) AS PRODUCTS
FROM PRODUCT
GROUP BY LEFT(PRODUCT_CODE, 2)
ORDER BY PRODUCT_CODE ASC;
- 앞글자 2글자를 자르는 문법을 생각하진 못했음. LIKE 문법을 어찌저찌 쓰면 가능할 줄 알았는데 앞글자 코드가 달랐기 때문에 불가능한 것을 깨닫고 난 후 힌트를 찾아서 풀었음.
- ORDER BY 부분 잘못 적음 : CATEGORY 기준으로 묶었기 때문에 ORDER BY LEFT(PRODUCT_CODE, 2) or ORDER BY CATEGORY로 써야함.
📌 새로 배운 문법
<-- 이번 문제에서 새로 배운 Java 문법 정리 -->
** LEFT() 함수 **
- LEFT(문자열, 숫자) 함수 : 문자열에서 왼쪽부터 N글자만 잘라서 반환해주는 함수
LEFT(문자열, N) -- 문자열의 왼쪽부터 N글자 추출
LEFT('ABCD', 2) -- 'AB' 반환
** 문자열 자르기 관련 함수들 **
| LEFT(str, N) | 문자열 왼쪽부터 N글자 추출 | LEFT('ABCDE', 2) → 'AB' |
| RIGHT(str, N) | 문자열 오른쪽부터 N글자 추출 | RIGHT('ABCDE', 2) → 'DE' |
| SUBSTRING(str, start, length) 또는 SUBSTR() | 원하는 위치부터 N글자 추출 | SUBSTRING('ABCDE', 2, 3) → 'BCD' |
| MID(str, start, length) | SUBSTRING()의 별명 (같은 기능) | MID('ABCDE', 2, 3) → 'BCD' |
- 앞에서 N글자 자를 땐 LEFT, 뒤에서 자를 땐 RIGHT, 특정 위치부터 자를 땐 SUBSTRING or MID!