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

MySQL 테이블에서 내림차순 정렬 후 단일 값만 업데이트하는 방법 (ORDER BY DESC + LIMIT)

MySQL 테이블에서 특정 조건(예: 가장 높은 점수)에 해당하는 단 하나의 레코드만 업데이트해야 하는 경우가 있습니다. 이럴 때는 ORDER BY DESCLIMIT 절을 함께 사용하면 됩니다.

ORDER BY DESC는 데이터를 내림차순으로 정렬하고, LIMIT은 처리할 레코드 수를 제한합니다. 여기서는 단일 레코드만 대상으로 하므로 LIMIT 1을 설정합니다.

1. 테이블 생성

먼저 예제에 사용할 테이블을 생성합니다.

mysql> create table DemoTable
(
    StudentName varchar(100),
    StudentMarks int
);
Query OK, 0 rows affected (0.54 sec)

2. 샘플 데이터 삽입

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

mysql> insert into DemoTable values('Chris',45);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values('Bob',78);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values('Mike',34);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('Robert',67);
Query OK, 1 row affected (0.16 sec)

3. 전체 데이터 조회

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

mysql> select *from DemoTable;

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

+-------------+--------------+
| StudentName | StudentMarks |
+-------------+--------------+
| Chris       |           45 |
| Bob         |           78 |
| Mike        |           34 |
| Robert      |           67 |
+-------------+--------------+
4 rows in set (0.00 sec)

4. 내림차순 정렬 후 단일 값 업데이트

다음은 StudentMarks를 기준으로 내림차순 정렬한 뒤, 가장 위에 있는 레코드 하나만 업데이트하는 쿼리입니다.

mysql> update DemoTable
set StudentName='Adam'
order by StudentMarks DESC LIMIT 1;
Query OK, 1 row affected (0.10 sec)
Rows matched: 1 Changed: 1 Warnings: 0

위 쿼리는 점수가 가장 높은 'Bob'(78점)의 이름만 'Adam'으로 변경합니다. 나머지 레코드는 영향을 받지 않습니다.

5. 업데이트 결과 확인

테이블을 다시 조회해 변경 사항을 확인해 보겠습니다.

mysql> select *from DemoTable;

결과를 보면 Bob 대신 Adam으로 이름이 변경되었고, 다른 레코드는 그대로 유지된 것을 알 수 있습니다.

+-------------+--------------+
| StudentName | StudentMarks |
+-------------+--------------+
| Chris       |           45 |
| Adam        |           78 |
| Mike        |           34 |
| Robert      |           67 |
+-------------+--------------+
4 rows in set (0.00 sec)

이처럼 UPDATE 문에 ORDER BY ... DESCLIMIT 1을 조합하면, 내림차순으로 정렬한 결과 중 첫 번째 레코드만 선택적으로 수정할 수 있습니다. 최고 점수나 최신 데이터 등 우선순위가 높은 단일 레코드를 갱신할 때 매우 유용한 패턴입니다.