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!