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

MySQL GROUP BY로 NULL·빈 문자열 제외하고 비어 있지 않은 열 값만 조회하는 방법

MySQL에서 GROUP BY 절과 조건을 함께 사용하면 각 그룹별로 NULL 또는 빈 문자열('')이 아닌 값만 효율적으로 추출할 수 있습니다. 이 글에서는 실제 예제를 통해 단계별로 그 방법을 살펴보겠습니다.

1. 샘플 테이블 생성

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

mysql> create table DemoTable
-> (
-> Id varchar(100),
-> Message varchar(200)
-> );
Query OK, 0 rows affected (1.17 sec)

2. 데이터 삽입

INSERT 명령을 사용해 빈 문자열과 NULL 값을 포함한 다양한 레코드를 삽입합니다.

mysql> insert into DemoTable values('1','');
Query OK, 1 row affected (0.23 sec)

mysql> insert into DemoTable values('1','Hi');
Query OK, 1 row affected (0.21 sec)

mysql> insert into DemoTable values('2','Hello');
Query OK, 1 row affected (0.15 sec)

mysql> insert into DemoTable values('3','Awesome');
Query OK, 1 row affected (0.18 sec)

mysql> insert into DemoTable values('3','Good Morning');
Query OK, 1 row affected (0.11 sec)

mysql> insert into DemoTable values('2',NULL);
Query OK, 1 row affected (0.15 sec)

3. 전체 데이터 확인

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

mysql> select *from DemoTable;

출력 결과

+------+--------------+
| Id | Message |
+------+--------------+
| 1 | |
| 1 | Hi |
| 2 | Hello |
| 3 | Awesome |
| 3 | Good Morning |
| 2 | NULL |
+------+--------------+
6 rows in set (0.00 sec)

위 결과를 보면 Id 1에는 빈 문자열('')이, Id 2에는 NULL 값이 포함되어 있는 것을 확인할 수 있습니다.

4. 비어 있지 않은 값만 GROUP BY로 조회하기

다음은 WHERE 절에서 IS NOT NULLlength() 함수를 함께 사용하여, 각 Id 그룹별로 비어 있지 않은 메시지 중 사전 순으로 가장 앞서는 값을 선택하는 쿼리입니다.

mysql> select Id,min(Message) from DemoTable
-> where Message IS NOT NULL and length(Message) > 0
-> group by Id;

출력 결과

+------+--------------+
| Id | min(Message) |
+------+--------------+
| 1 | Hi |
| 2 | Hello |
| 3 | Awesome |
+------+--------------+
3 rows in set (0.06 sec)

쿼리 핵심 포인트

  • Message IS NOT NULL — NULL 값을 제외합니다.
  • length(Message) > 0 — 빈 문자열('')까지 함께 걸러냅니다. IS NOT NULL만으로는 빈 문자열이 필터링되지 않기 때문에 두 조건을 반드시 함께 사용해야 합니다.
  • min(Message) — 각 그룹에서 비어 있지 않은 값 중 사전 순으로 가장 작은 값을 반환합니다.
  • group by Id — Id를 기준으로 레코드를 그룹화합니다.

이처럼 IS NOT NULLlength() 함수를 조합하면 NULL과 빈 문자열을 동시에 필터링할 수 있으며, GROUP BY 결과에서 의미 있는 값만 깔끔하게 추출할 수 있습니다.