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

MySQL에서 GROUP BY 조건으로 필드 업데이트하기 – UPDATE와 ORDER BY LIMIT 활용법

MySQL에서는 UPDATE 문에 GROUP BY 절을 직접 사용할 수 없습니다. 하지만 ORDER BY 절과 LIMIT 절을 조합하면 특정 조건에 해당하는 여러 행 중에서 원하는 순서의 행 하나만 선택적으로 업데이트할 수 있습니다. 아래 예제를 통해 전체 과정을 단계별로 살펴보겠습니다.

1단계: 테이블 생성

먼저 CREATE TABLE 명령어로 테이블을 생성합니다.

mysql> create table DemoTable2018
    -> (
    -> EmployeeId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> EmployeeName varchar(20),
    -> EmployeeSalary int
    -> );
Query OK, 0 rows affected (0.61 sec)

2단계: 데이터 삽입

INSERT 명령어로 테이블에 샘플 레코드를 추가합니다.

mysql> insert into DemoTable2018(EmployeeName,EmployeeSalary) values('Chris',10000);
Query OK, 1 row affected (0.19 sec)

mysql> insert into DemoTable2018(EmployeeName,EmployeeSalary) values('David',12560);
Query OK, 1 row affected (0.18 sec)

mysql> insert into DemoTable2018(EmployeeName,EmployeeSalary) values('Chris',25400);
Query OK, 1 row affected (0.09 sec)

3단계: 저장된 데이터 확인

SELECT 문으로 테이블의 모든 레코드를 조회합니다.

mysql> select *from DemoTable2018;

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

+------------+--------------+----------------+
| EmployeeId | EmployeeName | EmployeeSalary |
+------------+--------------+----------------+
| 1          | Chris        | 10000          |
| 2          | David        | 12560          |
| 3          | Chris        | 25400          |
+------------+--------------+----------------+
3 rows in set (0.00 sec)

현재 'Chris'라는 이름의 직원이 두 명(급여 10,000 / 25,400) 있으므로, 단순히 이름만으로 WHERE 조건을 걸면 두 행이 모두 영향을 받게 됩니다.

4단계: UPDATE + ORDER BY LIMIT로 일부 행만 업데이트

이제 ORDER BYLIMIT를 사용해 해당 조건을 만족하는 첫 번째 행만 업데이트해 보겠습니다.

mysql> update DemoTable2018
    -> set EmployeeSalary=EmployeeSalary+2500 where EmployeeName='Chris'
    -> order by EmployeeId limit 1;
Query OK, 1 row affected (0.13 sec)
Rows matched: 1 Changed: 1 Warnings: 0

이 쿼리는 EmployeeId 오름차순으로 정렬한 뒤, 첫 번째 행(EmployeeId = 1)에 대해서만 급여를 2,500 인상합니다.

5단계: 업데이트 결과 확인

테이블을 다시 조회하여 변경 사항을 확인합니다.

mysql> select *from DemoTable2018;

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

+------------+--------------+----------------+
| EmployeeId | EmployeeName | EmployeeSalary |
+------------+--------------+----------------+
| 1          | Chris        | 12500          |
| 2          | David        | 12560          |
| 3          | Chris        | 25400          |
+------------+--------------+----------------+
3 rows in set (0.00 sec)

결과를 보면 EmployeeId가 1인 'Chris'의 급여만 12,500으로 증가했고, 나머지 레코드는 그대로 유지된 것을 확인할 수 있습니다.

핵심 정리

  • MySQL의 UPDATE 문은 GROUP BY를 직접 지원하지 않습니다.
  • ORDER BYLIMIT를 조합하면 조건에 맞는 여러 행 중 우선순위가 가장 높은 행 하나만 업데이트할 수 있습니다.
  • PRIMARY KEY처럼 고유한 컬럼을 ORDER BY 기준으로 사용하면 어떤 행이 수정될지 명확하게 예측할 수 있습니다.
  • 동일한 조건의 중복 데이터 중 일부만 변경해야 할 때 유용한 패턴입니다.