MySQL에서 테이블에 저장된 데이터 중 홀수 번째(1, 3, 5...) 레코드만 골라서 조회해야 하는 경우가 있습니다. 이 개념을 이해하기 위해 다음과 같은 데이터가 들어 있는 'Information' 테이블을 예로 들어 보겠습니다.
mysql> Select * from Information; +----+---------+ | id | Name | +----+---------+ | 1 | Gaurav | | 2 | Ram | | 3 | Rahul | | 4 | Aarav | | 5 | Aryan | | 6 | Krishan | +----+---------+ 6 rows in set (0.00 sec)
홀수 레코드 조회 쿼리
아래 쿼리는 위 'Information' 테이블에서 홀수 번째 레코드, 즉 id가 1, 3, 5인 행만 가져옵니다.
mysql> Select id,Name from information group by id having mod(id,2) = 1; +----+--------+ | id | Name | +----+--------+ | 1 | Gaurav | | 3 | Rahul | | 5 | Aryan | +----+--------+ 3 rows in set (0.09 sec)
쿼리 동작 원리
여기서 핵심 역할을 하는 것은 MOD() 함수입니다. MOD(id, 2)는 id 값을 2로 나눈 나머지를 반환하는데, 그 결과가 1이라면 해당 레코드는 홀수 번째라는 의미입니다. HAVING 절은 GROUP BY로 묶인 결과에 조건을 적용하므로, mod(id,2) = 1 조건을 만족하는 레코드만 최종 결과에 남게 됩니다.
반대로 짝수 번째 레코드만 조회하고 싶다면 조건식을 mod(id,2) = 0으로 변경하면 됩니다. 이처럼 MOD 함수와 HAVING 절을 조합하면 별도의 서브쿼리나 추가 컬럼 없이 간단하게 원하는 간격의 레코드를 추출할 수 있습니다.