Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 쉼표로 구분된 특정 값이 포함된 행 개수 세는 방법 (FIND_IN_SET 활용)

MySQL에서 쉼표로 구분된 값의 개수를 세는 방법

데이터베이스에 저장된 쉼표로 구분된 값(CSV 형식) 중에서 특정 값이 포함된 행의 개수를 확인하고 싶다면, 집계 함수 COUNT(*)FIND_IN_SET() 함수를 함께 사용하면 됩니다.

FIND_IN_SET() 함수는 첫 번째 인자로 전달한 값이 두 번째 인자(쉼표로 구분된 문자열) 내에 존재하면 해당 위치를 반환하고, 존재하지 않으면 0을 반환합니다. 이 특성을 활용하면 원하는 값을 손쉽게 검색할 수 있습니다.

1단계: 테이블 생성하기

먼저 예제에 사용할 테이블을 생성합니다.

mysql> create table DemoTable
(
    Value varchar(100)
);
Query OK, 0 rows affected (0.49 sec)

2단계: 데이터 삽입하기

INSERT 명령어를 사용하여 쉼표로 구분된 값들을 저장합니다.

mysql> insert into DemoTable values('10,20,60,80');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values('60,70,90');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values('50,55,65,60');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values('90,98,97');
Query OK, 1 row affected (0.12 sec)

3단계: 저장된 데이터 확인하기

SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.

mysql> select *from DemoTable;

위 쿼리는 다음과 같은 결과를 출력합니다.

+-------------+
| Value       |
+-------------+
| 10,20,60,80 |
| 60,70,90    |
| 50,55,65,60 |
| 90,98,97    |
+-------------+
4 rows in set (0.00 sec)

4단계: FIND_IN_SET()으로 특정 값 개수 세기

이제 '60'이라는 값이 포함된 행의 개수를 세는 쿼리를 실행해 보겠습니다.

mysql> select count(*) from DemoTable
    where find_in_set('60',Value) > 0;

실행 결과는 다음과 같습니다.

+----------+
| count(*) |
+----------+
|        3 |
+----------+
1 row in set (0.00 sec)

결과 분석

결과를 보면 '60'이 포함된 행은 총 3개입니다. 각 행을 살펴보면 다음과 같습니다.

  • 10,20,60,80 → '60' 포함 ✓
  • 60,70,90 → '60' 포함 ✓
  • 50,55,65,60 → '60' 포함 ✓
  • 90,98,97 → '60' 미포함 ✗

주목할 점은 네 번째 행의 '97'처럼 숫자에 '6'과 '0'이 포함되어 있어도 FIND_IN_SET()은 정확히 일치하는 값만 찾는다는 것입니다. 즉, 부분 문자열이 아닌 쉼표로 구분된 개별 항목 단위로 정확하게 매칭됩니다. 만약 LIKE '%60%'를 사용했다면 '960' 같은 값도 잘못 매칭될 수 있으므로, 쉼표로 구분된 값을 검색할 때는 FIND_IN_SET()을 사용하는 것이 훨씬 안전하고 정확합니다.