[코딩테스트]/[SQL]

[LeetCode - SQL] (Easy) 3465. Find Products with Valid Serial Numbers

잰잰' 2025. 4. 14. 12:16
Table: products

+--------------+------------+
| Column Name  | Type       |
+--------------+------------+
| product_id   | int        |
| product_name | varchar    |
| description  | varchar    |
+--------------+------------+

(product_id)는 이 테이블의 고유 키입니다.
테이블의 각 행은 고유한 ID, 이름, 설명을 가진 하나의 제품을 나타냅니다.

 

문제

제품 설명(description)에 유효한 일련번호(Serial Number) 패턴이 포함된 모든 제품을 찾는 SQL 쿼리를 작성하세요.

유효한 일련번호는 다음 규칙을 따릅니다:

1. 대소문자를 구분하여 SN으로 시작해야 합니다.

2. 그 뒤에 정확히 4자리 숫자가 따라와야 합니다.

3. 이어서 하이픈(-) 이 있어야 하고, 그 뒤에 정확히 4자리 숫자가 있어야 합니다.

4. 일련번호는 제품 설명(description) 내에 포함되어 있어야 하며, 반드시 시작 부분일 필요는 없습니다.

결과 테이블은 product_id 기준으로 오름차순 정렬하여 반환하세요.

Example:

Input:

products table:

+------------+--------------+------------------------------------------------------+
| product_id | product_name | description                                          |
+------------+--------------+------------------------------------------------------+
| 1          | Widget A     | This is a sample product with SN1234-5678            |
| 2          | Widget B     | A product with serial SN9876-1234 in the description |
| 3          | Widget C     | Product SN1234-56789 is available now                |
| 4          | Widget D     | No serial number here                                |
| 5          | Widget E     | Check out SN4321-8765 in this description            |
+------------+--------------+------------------------------------------------------+
    
Output:

+------------+--------------+------------------------------------------------------+
| product_id | product_name | description                                          |
+------------+--------------+------------------------------------------------------+
| 1          | Widget A     | This is a sample product with SN1234-5678            |
| 2          | Widget B     | A product with serial SN9876-1234 in the description |
| 5          | Widget E     | Check out SN4321-8765 in this description            |
+------------+--------------+------------------------------------------------------+

설명 :

- Product 1 : 유효한 일련번호 SN1234-5678

- Product 2 : 유효한 일련번호 SN9876-1234

- Product 3 : 유효하지 않은 일련번호 SN1234-56789 (하이픈 뒤에 숫자가 5자리라서 유효하지 않음)

- Product 4 : 설명에 일련번호가 없음

- Product 5 : 유효한 일련번호 SN4321-8765

결과 테이블은 product_id 기준으로 오름차순 정렬됩니다.

 

✏️ 풀이

# 풀이1 #
SELECT product_id, product_name, description
FROM products
WHERE description LIKE '%SN____-____ %' OR description LIKE '%SN____-____'
ORDER BY product_id;

# 풀이2 #
SELECT product_id, product_name, description
FROM products
WHERE description REGEXP 'SN[0-9]{4}-[0-9]{4}\\b'
ORDER BY product_id;

SN으로 시작하고 그 뒤에 4자리 숫자 이어서 하이픈(-) 그 뒤에 4자리 숫자

이 형식이 중간에 있을 수도 문장의 첫 시작일 수도 문장의 끝 일 수도 있다

해당 경우를 고려해서 쿼리를 짜야한다