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

MySQL에서 HAVING LENGTH()를 활용해 필드 길이별로 그룹화하고 조건을 거는 방법

MySQL에서 HAVING LENGTH(필드) 절을 사용하면 문자열 길이를 기준으로 그룹화한 결과에 조건을 적용할 수 있습니다. 이번 글에서는 실제 예제를 통해 테이블 생성부터 데이터 삽입, 그리고 HAVING LENGTH()를 활용한 쿼리 작성까지 단계별로 살펴보겠습니다.

1. 테이블 생성하기

먼저 예제에 사용할 테이블을 생성합니다. Title이라는 TEXT 타입 컬럼 하나를 가진 DemoTable을 만들어 보겠습니다.

mysql> create table DemoTable
(
    Title text
);
Query OK, 0 rows affected (0.39 sec)

2. 샘플 데이터 삽입하기

INSERT 명령을 사용하여 테이블에 여러 개의 레코드를 삽입합니다. 일부러 같은 제목을 중복해서 넣어 그룹화 결과가 어떻게 달라지는지 확인할 수 있도록 했습니다.

mysql> insert into DemoTable values('Introduction to MySQL');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values('Introduction to Java');
Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable values('Introduction to SQL');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values('Introduction to Python');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values('Introduction to SQL');
Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable values('Introduction to Java');
Query OK, 1 row affected (0.13 sec)

3. 전체 데이터 조회하기

SELECT 문을 실행하여 테이블에 저장된 모든 레코드를 확인합니다.

mysql> select *from DemoTable;

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

+------------------------+
| Title                  |
+------------------------+
| Introduction to MySQL  |
| Introduction to Java   |
| Introduction to SQL    |
| Introduction to Python |
| Introduction to SQL    |
| Introduction to Java   |
+------------------------+
6 rows in set (0.00 sec)

4. HAVING LENGTH()로 길이 조건 적용하기

이제 핵심인 HAVING LENGTH(필드) 구현 방법입니다. GROUP BY 절에서 LENGTH(Title) 함수로 제목의 문자열 길이를 기준으로 그룹화한 뒤, HAVING 절에서 길이가 21보다 작은 그룹만 필터링합니다.

mysql> select *from DemoTable group by length(Title)
   having length(Title) < 21;

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

+----------------------+
| Title                |
+----------------------+
| Introduction to SQL  |
| Introduction to Java |
+----------------------+
2 rows in set (0.00 sec)

결과 분석

'Introduction to MySQL'(20자)과 'Introduction to Python'(22자)은 각각 고유한 길이를 가진 값이므로 별도의 그룹을 형성하지만, 'Introduction to SQL'과 'Introduction to Java'는 모두 20자로 동일한 길이를 공유합니다. 따라서 두 값은 하나의 그룹으로 묶이고, 대표값 한 건씩만 출력됩니다. 최종적으로 길이가 21 미만인 그룹에 해당하는 두 개의 행만 결과로 반환된 것입니다.

이처럼 HAVING LENGTH()를 활용하면 WHERE 절과 달리 그룹화 이후의 집계 결과에 조건을 걸 수 있다는 점이 핵심입니다. 문자열 길이를 기준으로 데이터를 분류하거나 특정 길이 범위의 데이터만 추출하고 싶을 때 유용하게 사용할 수 있습니다.