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

MySQL SELECT 쿼리에서 새 열을 추가하고 행 번호를 값으로 표시하는 방법

SELECT 쿼리 결과에 새로운 열을 추가하면서, 해당 열의 값으로 각 행의 번호(순위)를 표시하고 싶다면 MySQL의 row_number() 윈도우 함수를 활용할 수 있습니다. 이번 글에서는 실제 예제를 통해 그 방법을 단계별로 살펴보겠습니다.

1. 테이블 생성하기

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

mysql> create table DemoTable1342
    -> (
    -> Score int
    -> );
Query OK, 0 rows affected (0.68 sec)

2. 데이터 삽입하기

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

mysql> insert into DemoTable1342 values(80);
Query OK, 1 row affected (0.24 sec)
mysql> insert into DemoTable1342 values(98);
Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable1342 values(78);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1342 values(89);
Query OK, 1 row affected (0.07 sec)

3. 전체 레코드 확인하기

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

mysql> select * from DemoTable1342;

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

+-------+
| Score |
+-------+
|    80 |
|    98 |
|    78 |
|    89 |
+-------+
4 rows in set (0.00 sec)

4. row_number()로 행 번호 열 추가하기

아래 쿼리는 SELECT 결과에 새로운 열을 추가하되, 그 값으로 각 행의 번호를 부여하는 방법을 보여줍니다. row_number() over() 함수를 사용하면 결과 집합의 각 행에 순차적인 번호가 할당됩니다.

mysql> select Score,row_number() over() as `Rank` from DemoTable1342 order by Score DESC;

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

+-------+------+
| Score | Rank |
+-------+------+
|    98 |    1 |
|    89 |    2 |
|    80 |    3 |
|    78 |    4 |
+-------+------+
4 rows in set (0.32 sec)

위 출력에서 볼 수 있듯이, 점수(Score)를 기준으로 내림차순 정렬된 결과에 Rank라는 새로운 열이 추가되었고, 각 행에는 1부터 시작하는 순차적인 번호가 부여되었습니다. 참고로 row_number() over() 기능은 MySQL 8.0 이상 버전에서 지원되므로, 하위 버전을 사용 중이라면 사용자 변수(@rownum) 방식을 대안으로 고려할 수 있습니다.