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

MySQL GROUP BY 그룹에 특정 값이 존재하는지 확인하는 방법

MySQL에서는 집계 함수 SUM()과 IF 함수를 함께 사용하면 GROUP BY로 묶인 각 그룹 안에 특정 값이 포함되어 있는지 손쉽게 확인할 수 있습니다. 이 글에서는 예제 테이블을 만들고, 각 그룹에 특정 이름이 존재하는지 여부를 'YES' 또는 'NO'로 출력하는 쿼리를 단계별로 살펴보겠습니다.

1. 데모 테이블 생성하기

먼저 실습용 데모 테이블을 생성합니다.

mysql> create table GroupbygroupDemo
   -> (
   -> UserId int,
   -> UserName varchar(20)
   -> );
Query OK, 0 rows affected (1.48 sec)

2. 샘플 데이터 삽입하기

INSERT 명령을 사용해 테이블에 몇 개의 레코드를 추가합니다.

mysql> insert into GroupbygroupDemo values(10,'John');
Query OK, 1 row affected (0.14 sec)
mysql> insert into GroupbygroupDemo values(10,'Carol');
Query OK, 1 row affected (0.08 sec)
mysql> insert into GroupbygroupDemo values(10,'Carol');
Query OK, 1 row affected (0.12 sec)
mysql> insert into GroupbygroupDemo values(20,'David');
Query OK, 1 row affected (0.17 sec)
mysql> insert into GroupbygroupDemo values(30,'John');
Query OK, 1 row affected (0.12 sec)
mysql> insert into GroupbygroupDemo values(30,'David');
Query OK, 1 row affected (0.20 sec)
mysql> insert into GroupbygroupDemo values(30,'Mike');
Query OK, 1 row affected (0.16 sec)

3. 전체 데이터 조회하기

SELECT 문으로 테이블의 모든 레코드를 조회하여 데이터가 정상적으로 입력되었는지 확인합니다.

mysql> select *from GroupbygroupDemo;

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

+--------+----------+
| UserId | UserName |
+--------+----------+
|     10 | John     |
|     10 | Carol    |
|     10 | Carol    |
|     20 | David    |
|     30 | John     |
|     30 | David    |
|     30 | Mike     |
+--------+----------+
7 rows in set (0.00 sec)

4. GROUP BY 그룹 내 특정 값 존재 여부 확인하기

핵심 아이디어는 sum(UserName='David')입니다. 조건식 UserName='David'은 일치하면 1, 아니면 0을 반환하므로, 그룹별로 이 값을 합산하면 해당 이름이 그룹에 하나라도 존재하는 경우 0보다 큰 값이 됩니다. 이를 IF 함수와 결합하면 다음과 같이 'YES' 또는 'NO'로 결과를 표시할 수 있습니다.

mysql> select UserId,
   -> if(sum(UserName='David'),'YES','NO') as Correct_Name_David
   -> from GroupbygroupDemo
   -> group by UserId;

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

+--------+--------------------+
| UserId | Correct_Name_David |
+--------+--------------------+
|     10 | NO                 |
|     20 | YES                |
|     30 | YES                |
+--------+--------------------+
3 rows in set (0.08 sec)

결과 해석

위 출력을 보면 UserId가 10인 그룹에는 'David'라는 이름이 없으므로 'NO'가 반환되었고, UserId가 20과 30인 그룹에는 'David'가 존재하므로 'YES'가 반환되었습니다. 이처럼 SUM()과 IF의 조합은 GROUP BY로 그룹화된 데이터 안에서 특정 값의 존재 여부를 간결하게 판별할 수 있는 유용한 기법입니다.