MySQL에서 나머지 연산자(모듈로, %)의 결과값을 기준으로 레코드를 정렬하려면 ORDER BY 절과 함께 모듈로 연산을 사용하면 됩니다. 이 방법은 학번이 짝수인지 홀수인지, 또는 특정 수로 나눈 나머지 값에 따라 데이터를 그룹화하여 정렬할 때 유용합니다.
1. 테이블 생성하기
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table DemoTable
(
StudentId int,
StudentName varchar(100)
);
Query OK, 0 rows affected (1.88 sec)2. 샘플 데이터 삽입하기
INSERT 명령을 사용하여 테이블에 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable values(100,'Chris'); Query OK, 1 row affected (0.41 sec) mysql> insert into DemoTable values(101,'Robert'); Query OK, 1 row affected (0.30 sec) mysql> insert into DemoTable values(102,'David'); Query OK, 1 row affected (0.94 sec) mysql> insert into DemoTable values(103,'Mike'); Query OK, 1 row affected (0.23 sec)
3. 전체 레코드 확인하기
SELECT 문을 사용하여 테이블의 모든 레코드를 조회합니다.
mysql> select *from DemoTable;
위 쿼리는 다음과 같은 결과를 출력합니다.
+-----------+-------------+ | StudentId | StudentName | +-----------+-------------+ | 100 | Chris | | 101 | Robert | | 102 | David | | 103 | Mike | +-----------+-------------+ 4 rows in set (0.00 sec)
4. 모듈로 연산 결과를 기준으로 정렬하는 쿼리
이제 StudentId % 2(2로 나눈 나머지)와 StudentId % 3(3으로 나눈 나머지) 값을 기준으로 오름차순 정렬하는 쿼리입니다.
mysql> select StudentId,StudentName,StudentId % 2,StudentId % 3 from DemoTable order by StudentId % 2,StudentId % 3;
실행 결과는 다음과 같습니다.
+-----------+-------------+---------------+---------------+ | StudentId | StudentName | StudentId % 2 | StudentId % 3 | +-----------+-------------+---------------+---------------+ | 102 | David | 0 | 0 | | 100 | Chris | 0 | 1 | | 103 | Mike | 1 | 1 | | 101 | Robert | 1 | 2 | +-----------+-------------+---------------+---------------+ 4 rows in set (0.00 sec)
결과 분석
출력 결과를 보면 레코드가 단순히 학번 순서가 아닌, 모듈로 연산 결과에 따라 정렬된 것을 확인할 수 있습니다.
- David(102): 102 % 2 = 0, 102 % 3 = 0 → 가장 먼저 정렬됨
- Chris(100): 100 % 2 = 0, 100 % 3 = 1 → 두 번째로 정렬됨
- Mike(103): 103 % 2 = 1, 103 % 3 = 1 → 세 번째로 정렬됨
- Robert(101): 101 % 2 = 1, 101 % 3 = 2 → 마지막에 정렬됨
즉, MySQL은 ORDER BY 절에 명시된 첫 번째 기준(StudentId % 2)으로 먼저 정렬하고, 값이 동일한 경우 두 번째 기준(StudentId % 3)으로 다시 정렬합니다. 이처럼 모듈로 연산을 활용하면 짝수/홀수 구분이나 주기적인 패턴에 따라 유연하게 데이터를 정렬할 수 있습니다.