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

MySQL에서 증분 카운터를 SELECT로 구현하는 방법

MySQL에서 SELECT 쿼리를 실행하면서 행마다 1씩 증가하는 카운터를 표시하고 싶다면, 사용자 정의 변수(user-defined variable)를 활용하면 됩니다. 핵심은 쿼리 실행 전에 변수를 선언하고 초기화한 뒤, SELECT 문 안에서 해당 변수의 값을 하나씩 증가시키는 것입니다.

기본 문법

증분 카운터를 만드는 기본적인 문법은 다음과 같습니다.

set @변수명=0;
select 컬럼명,
@변수명:=@변수명+1 as 별칭
from 테이블명;

예제 테이블 생성

실제 동작을 확인하기 위해 먼저 간단한 테이블을 만들어 보겠습니다.

mysql> create table incrementCounterDemo
-> (
-> Name varchar(100)
-> );
Query OK, 0 rows affected (1.01 sec)

샘플 데이터 입력

INSERT 명령어를 사용해 몇 개의 레코드를 추가합니다.

mysql> insert into incrementCounterDemo values('John');
Query OK, 1 row affected (0.18 sec)

mysql> insert into incrementCounterDemo values('Carol');
Query OK, 1 row affected (0.20 sec)

mysql> insert into incrementCounterDemo values('David');
Query OK, 1 row affected (0.14 sec)

mysql> insert into incrementCounterDemo values('Mike');
Query OK, 1 row affected (0.21 sec)

mysql> insert into incrementCounterDemo values('Bob');
Query OK, 1 row affected (0.12 sec)

mysql> insert into incrementCounterDemo values('Sam');
Query OK, 1 row affected (0.16 sec)

입력된 데이터 확인

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

mysql> select *from incrementCounterDemo;

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

+-------+
| Name  |
+-------+
| John  |
| Carol |
| David |
| Mike  |
| Bob   |
| Sam   |
+-------+
6 rows in set (0.00 sec)

카운터 변수 초기화

이제 카운터로 사용할 변수를 0으로 초기화합니다.

mysql> set @counter=0;
Query OK, 0 rows affected (0.00 sec)

증분 카운터 조회하기

초기화가 완료되면 SELECT 문에서 @counter:=@counter+1 형태로 변수 값을 증가시키며 각 행에 순번을 부여할 수 있습니다.

mysql> select Name,
-> @counter:=@counter+1 as IncrementingValuebyOne
-> from incrementCounterDemo;

실행 결과를 보면 각 행마다 값이 1씩 증가하는 것을 확인할 수 있습니다.

+-------+------------------------+
| Name  | IncrementingValuebyOne |
+-------+------------------------+
| John  | 1                      |
| Carol | 2                      |
| David | 3                      |
| Mike  | 4                      |
| Bob   | 5                      |
| Sam   | 6                      |
+-------+------------------------+
6 rows in set (0.00 sec)

참고 사항

사용자 정의 변수 방식은 MySQL 5.x 버전까지 널리 사용되었지만, 공식적으로 권장되지 않는 패턴이기도 합니다. MySQL 8.0 이상을 사용한다면 윈도우 함수인 ROW_NUMBER()를 활용하는 것이 더 안전하고 표준적입니다.

select Name,
row_number() over() as IncrementingValuebyOne
from incrementCounterDemo;

두 방식 모두 동일하게 1부터 시작하는 순번을 생성하지만, 윈도우 함수 방식은 쿼리 최적화와 유지보수 측면에서 더 유리합니다. 기존 시스템 호환성이 필요하다면 변수 방식을, 새로 개발하는 환경이라면 ROW_NUMBER() 사용을 권장합니다.