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

MySQL SELECT 문 안에서 CASE 문 활용하는 방법

SELECT 문 안에서 조건에 따라 다른 값을 반환하고 싶다면 CASE WHEN 문을 활용할 수 있습니다. 이번 글에서는 실제 예제를 통해 MySQL에서 SELECT 문 내부에 CASE 문을 적용하는 방법을 단계별로 살펴보겠습니다.

1. 테이블 생성하기

먼저 예제에 사용할 테이블을 생성합니다. 이름(FirstName)과 점수(Score), 두 개의 컬럼으로 구성된 간단한 테이블입니다.

mysql> create table DemoTable
   -> (
   -> FirstName varchar(20),
   -> Score int
   -> );
Query OK, 0 rows affected (0.63 sec)

2. 샘플 데이터 삽입하기

INSERT 명령어를 사용해 테이블에 테스트용 레코드를 입력합니다.

mysql> insert into DemoTable values('John',46);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values('John',78);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('John',69);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('Chris',78);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values('Chris',89);
Query OK, 1 row affected (0.17 sec)

3. 전체 데이터 조회하기

SELECT 문으로 테이블에 저장된 모든 레코드를 확인해 보겠습니다.

mysql> select *from DemoTable;

위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.

+-----------+-------+
| FirstName | Score |
+-----------+-------+
| John      |    46 |
| John      |    78 |
| John      |    69 |
| Chris     |    78 |
| Chris     |    89 |
+-----------+-------+
5 rows in set (0.00 sec)

4. SELECT 문 안에서 CASE 문 사용하기

이제 핵심인 CASE 문을 SELECT 문 안에 적용해 보겠습니다. 아래 쿼리는 이름별로 그룹화한 뒤, 각 그룹에 점수 69점인 레코드가 존재하는지 여부를 판단합니다.

mysql> select FirstName,max(case when Score=69 then 1 else 0 end ) as isExistsOrNot
   -> from DemoTable
   -> group by FirstName;

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

+-----------+---------------+
| FirstName | isExistsOrNot |
+-----------+---------------+
| John      |             1 |
| Chris     |             0 |
+-----------+---------------+
2 rows in set (0.00 sec)

결과 해석

case when Score=69 then 1 else 0 end 구문은 점수가 69이면 1을, 그렇지 않으면 0을 반환합니다. 여기에 MAX() 함수와 GROUP BY를 함께 사용하면, 해당 그룹 내에 조건을 만족하는 행이 하나라도 있으면 1, 하나도 없으면 0이 됩니다.

  • John: 69점인 레코드가 존재하므로 1 반환
  • Chris: 69점인 레코드가 없으므로 0 반환

이처럼 CASE 문은 SELECT 문 안에서 조건부 로직을 구현할 때 매우 유용하게 활용됩니다. 특정 값의 존재 여부 확인, 조건에 따른 값 변환 등 다양한 상황에서 응용할 수 있으니 꼭 익혀두시기 바랍니다.