MySQL에서 GROUP BY 절을 사용하면 데이터를 특정 기준으로 묶어 개수를 집계할 수 있습니다. 여기에 CASE 문을 함께 활용하면, 일정 개수를 초과한 그룹은 실제 숫자 대신 '4보다 큼'처럼 원하는 문구로 표시할 수도 있습니다.
이 글에서는 예제 테이블을 만들고, 사용자별 메시지 수를 집계하면서 개수가 4개 이상이면 별도의 문자열로 출력하는 방법을 단계별로 살펴보겠습니다.
1. 예제 테이블 생성
먼저 데모용 테이블을 생성합니다.
mysql> create table DemoTable
(
UserId int,
UserMessage varchar(100)
);
Query OK, 0 rows affected (0.51 sec)2. 샘플 데이터 삽입
INSERT 명령을 사용해 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable values(1,'Hi'); Query OK, 1 row affected (0.09 sec) mysql> insert into DemoTable values(2,'Hello'); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable values(2,'Good'); Query OK, 1 row affected (0.20 sec) mysql> insert into DemoTable values(1,'Nice'); Query OK, 1 row affected (0.18 sec) mysql> insert into DemoTable values(1,'Awesome'); Query OK, 1 row affected (0.16 sec) mysql> insert into DemoTable values(1,'Amazing'); Query OK, 1 row affected (0.11 sec) mysql> insert into DemoTable values(1,'Good Morning'); Query OK, 1 row affected (0.12 sec)
3. 전체 데이터 확인
SELECT 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+--------+--------------+ | UserId | UserMessage | +--------+--------------+ | 1 | Hi | | 2 | Hello | | 2 | Good | | 1 | Nice | | 1 | Awesome | | 1 | Amazing | | 1 | Good Morning | +--------+--------------+ 7 rows in set (0.00 sec)
위 결과를 보면 UserId 1번 사용자는 메시지를 5개, UserId 2번 사용자는 2개 작성했습니다.
4. GROUP BY로 개수 집계 및 제한 표시하기
이제 GROUP BY로 사용자별 메시지 수를 집계하고, CASE 문을 이용해 개수가 4 미만일 때만 실제 숫자를 보여주고, 그렇지 않으면 'Greater Than 4'라는 문자열을 출력하는 쿼리를 작성합니다.
mysql> select UserId, case when count(*) < 4 then count(*) else 'Greater Than 4' end as 'NumberOfMessage' from DemoTable group by UserId;
실행 결과는 다음과 같습니다.
+--------+-----------------+ | UserId | NumberOfMessage | +--------+-----------------+ | 1 | Greater Than 4 | | 2 | 2 | +--------+-----------------+ 2 rows in set (0.06 sec)
결과 해석
- UserId 1: 메시지가 총 5개이므로 조건(count < 4)에 해당하지 않아 'Greater Than 4'가 표시됩니다.
- UserId 2: 메시지가 총 2개이므로 실제 개수인 '2'가 그대로 출력됩니다.
이처럼 GROUP BY와 COUNT(*), CASE 문을 조합하면 그룹별 레코드 수를 집계하면서 동시에 특정 임계값을 넘는 경우 다른 형태로 표시할 수 있습니다. 게시판에서 사용자별 게시글 수를 요약하거나, 스팸 방지를 위해 과도한 활동량을 가린 표시할 때 유용하게 활용할 수 있습니다.