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

MySQL 테이블에서 특정 값과 같거나 가장 가까운 큰 수 선택하기

MySQL 테이블에서 동일하거나 가장 가까운 큰 값 조회하기

MySQL에서 특정 기준값과 같거나 그보다 큰 수 중 가장 가까운 값을 조회해야 하는 경우가 있습니다. 이런 작업은 ORDER BY 절과 ABS() 함수를 조합하면 간단하게 구현할 수 있습니다. 예제를 통해 단계별로 살펴보겠습니다.

1. 테이블 생성

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

mysql> create table DemoTable
-> (
-> Value int
-> );
Query OK, 0 rows affected (1.33 sec)

2. 데이터 삽입

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

mysql> insert into DemoTable values(25);
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values(75);
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values(100);
Query OK, 1 row affected (0.13 sec)

3. 전체 레코드 확인

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

mysql> select * from DemoTable;

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

+-------+
| Value |
+-------+
| 25 |
| 75 |
| 100 |
+-------+
3 rows in set (0.00 sec)

4. 동일하거나 가장 가까운 큰 수를 찾는 쿼리

다음은 기준값 50과 같거나 가장 가까운 큰 수를 선택하는 쿼리입니다.

mysql> select * from DemoTable
-> order by abs(Value-50), Value desc
-> limit 1;

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

+-------+
| Value |
+-------+
| 75 |
+-------+
1 row in set (0.00 sec)

쿼리 동작 원리

ABS(Value - 50)은 각 행의 값이 기준값 50과 얼마나 차이 나는지 절댓값으로 계산합니다. 이 결과를 오름차순으로 정렬하면 50에 가장 가까운 값부터 순서대로 배치됩니다. 만약 차이가 같은 값이 여러 개라면(예제에서 25와 75는 모두 차이가 25로 동일) 두 번째 정렬 조건인 Value desc가 적용되어 더 큰 값인 75가 우선하게 됩니다. 마지막으로 LIMIT 1을 사용해 정렬된 결과 중 최상위 한 개의 레코드만 반환함으로써 원하는 값을 얻을 수 있습니다.