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

MySQL에서 특정 열의 최대값을 구해 다른 모든 행에 일괄 적용하는 방법

개요

MySQL에서는 서브쿼리를 활용하면 한 열의 최대값(MAX)을 구한 뒤, 그 값을 같은 열의 다른 모든 행에 일괄적으로 표시할 수 있습니다. 이번 글에서는 예제 테이블을 만들고 단계별로 이 방법을 살펴보겠습니다.

1. 테이블 생성하기

먼저 DemoTable이라는 테이블을 생성합니다. 이름을 저장하는 FirstName 문자열 열과 점수를 저장하는 Score 정수형 열로 구성됩니다.

mysql> create table DemoTable
(
    FirstName varchar(100),
    Score int
);
Query OK, 0 rows affected (0.60 sec)

2. 데이터 삽입하기

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

mysql> insert into DemoTable values('David',59);
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values('Chris',97);
Query OK, 1 row affected (0.24 sec)
mysql> insert into DemoTable values('Bob',98);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('Carol',91);
Query OK, 1 row affected (0.11 sec)

3. 전체 레코드 조회하기

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

mysql> select *from DemoTable;

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

+-----------+-------+
| FirstName | Score |
+-----------+-------+
| David     |    59 |
| Chris     |    97 |
| Bob       |    98 |
| Carol     |    91 |
+-----------+-------+
4 rows in set (0.00 sec)

4. 최대값을 모든 행에 적용하는 쿼리

핵심은 스칼라 서브쿼리입니다. SELECT 목록 안에서 (select max(Score) from DemoTable)처럼 최대값을 미리 구하고, 이를 별칭 Score로 지정하여 각 행마다 동일하게 출력합니다.

mysql> select FirstName,(select max(Score) from DemoTable) as Score from DemoTable;

실행 결과는 다음과 같습니다. 모든 행의 Score 값이 최대값인 98로 표시됩니다.

+-----------+-------+
| FirstName | Score |
+-----------+-------+
| David     |    98 |
| Chris     |    98 |
| Bob       |    98 |
| Carol     |    98 |
+-----------+-------+
4 rows in set (0.00 sec)

정리

이 방식은 실제 테이블 데이터를 변경(UPDATE)하지 않고, 조회 결과에서만 최대값을 일괄 표시하는 기법입니다. 만약 테이블 자체의 값을 수정하고 싶다면 UPDATE DemoTable SET Score = (SELECT MAX(Score) FROM DemoTable); 형태로 활용할 수 있습니다. 서브쿼리를 응용하면 평균값, 최소값 등 다른 집계 결과도 손쉽게 모든 행에 적용할 수 있습니다.