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

MySQL에서 id 오름차순(ASC)으로 마지막 3개 행을 선택하는 방법

MySQL에서 id 오름차순(ASC)으로 정렬된 상태의 마지막 3개 행을 조회하려면 서브쿼리(subquery)를 사용하면 됩니다. 핵심 아이디어는 내부 쿼리에서 먼저 내림차순(DESC)으로 정렬해 최신 3개 행을 추출한 후, 외부 쿼리에서 다시 오름차순으로 정렬하는 것입니다.

기본 문법

SELECT * FROM (
    SELECT * FROM yourTableName ORDER BY yourIdColumnName DESC LIMIT 3
) anyAliasName
ORDER BY yourIdColumnName;

내부 쿼리가 ID 기준으로 내림차순 정렬한 뒤 LIMIT 3으로 마지막 3개 행만 가져오고, 외부 쿼리가 이 결과를 다시 오름차순으로 정렬해 반환합니다.

1단계 — 테이블 생성하기

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

mysql> create table DemoTable
(
    ClientId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    ClientName varchar(100)
);
Query OK, 0 rows affected (0.60 sec)

2단계 — 레코드 삽입하기

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

mysql> insert into DemoTable(ClientName) values('Larry');
Query OK, 1 row affected (0.18 sec)

mysql> insert into DemoTable(ClientName) values('Chris');
Query OK, 1 row affected (0.12 sec)

mysql> insert into DemoTable(ClientName) values('Bob');
Query OK, 1 row affected (0.10 sec)

mysql> insert into DemoTable(ClientName) values('David');
Query OK, 1 row affected (0.12 sec)

mysql> insert into DemoTable(ClientName) values('Carol');
Query OK, 1 row affected (0.10 sec)

mysql> insert into DemoTable(ClientName) values('Robert');
Query OK, 1 row affected (0.19 sec)

mysql> insert into DemoTable(ClientName) values('Sam');
Query OK, 1 row affected (0.17 sec)

mysql> insert into DemoTable(ClientName) values('Mike');
Query OK, 1 row affected (0.12 sec)

3단계 — 전체 데이터 확인하기

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

mysql> select * from DemoTable;

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

+----------+------------+
| ClientId | ClientName |
+----------+------------+
| 1        | Larry      |
| 2        | Chris      |
| 3        | Bob        |
| 4        | David      |
| 5        | Carol      |
| 6        | Robert     |
| 7        | Sam        |
| 8        | Mike       |
+----------+------------+
8 rows in set (0.00 sec)

4단계 — id 오름차순으로 마지막 3개 행 조회하기

아래 쿼리는 id 오름차순 정렬 기준으로 마지막 3개 행을 선택합니다.

mysql> SELECT * FROM (
   SELECT * FROM DemoTable ORDER BY ClientId DESC LIMIT 3
) tbl
ORDER BY ClientId ASC;

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

+----------+------------+
| ClientId | ClientName |
+----------+------------+
| 6        | Robert     |
| 7        | Sam        |
| 8        | Mike       |
+----------+------------+
3 rows in set (0.00 sec)

결과를 보면 전체 8개 행 중 가장 큰 ClientId인 6, 7, 8번 행이 오름차순으로 출력되었습니다. 이처럼 서브쿼리를 활용하면 정렬 방향을 유지하면서도 원하는 개수의 최근 행을 손쉽게 가져올 수 있습니다.