[SQL] MySQL의 쿼리와 가장 가까운 수치를 선택
SQLMySQL의 쿼리와 가장 가까운 수치를 선택
이것은 쉽게 내가 만드는 중이라서보다 아마이지만, 기본적으로 내가 뭘해야 지정된 값으로 열에서 가장 가까운 숫자가있는 행을 선택합니다. 예를 들면 :
10, 15, 16 : 지정된 컬럼 3 행에 대한 값을 데이터베이스에 목록
내가 14에 가장 가까운 행을 지정할 경우, 15 행을 선택합니다.
같은 거리에있는 2 개 + 행이 경우에도, 그 중 하나를 임의로 선택합니다.
해결법
-
==============================
1.하나의 옵션은는 다음과 같다 :
하나의 옵션은는 다음과 같다 :
select the_value, abs(the_value - 14) as distance_from_test from the_table order by distance_from_test limit 1
임의의 레코드를 선택하려면 ORDER BY 절에, 랜드 ()를 추가 할 수 있습니다. 이 방법의 단점은 파생 된 값 distance_from_test을 정렬해야하기 때문에 당신이 인덱스에서 어떤 혜택을 얻을 수 없다는 것입니다.
당신이 the_value에 인덱스가 있고 관계의 경우 무작위로 결과에 대한 귀하의 요구 사항을 완화하는 경우, 당신은 바로 아래 바로 테스트 값 위의 첫 번째 값과 제 값을 선택 제한된 범위 쿼리의 한 쌍을 수행 할 수 있습니다 테스트 값에 가장 가까운 중 테스트 값과 선택 :
( select the_value from the_table where the_value >= 14 order by the_value asc limit 1 ) union ( select the_value from the_table where the_value < 14 order by the_value desc limit 1 ) order by abs(the_value - 14) limit 1
-
==============================
2.인덱스를 사용하기 위해서는, 당신은 목표 위의 최소값, 아래의 최대 값을 선택할 수 있습니다. 그런 다음 당신은 단지 확인하기 위해 두 개의 값을 가지고있다.
인덱스를 사용하기 위해서는, 당신은 목표 위의 최소값, 아래의 최대 값을 선택할 수 있습니다. 그런 다음 당신은 단지 확인하기 위해 두 개의 값을 가지고있다.
-
==============================
3.당신은 어떻게 넥타이 차단기를 처리 할 것인가? 이 첫 번째 걸릴 것 때문에 :
당신은 어떻게 넥타이 차단기를 처리 할 것인가? 이 첫 번째 걸릴 것 때문에 :
SELECT t.col FROM TABLE t ORDER BY ABS(t.col - @val) LIMIT 1
인덱스 안전한 대안 :
SELECT xt.col FROM (SELECT t.col, ABS(t.col - @val) 'diff' FROM TABLE t) xt ORDER BY xt.diff LIMIT 1
from https://stackoverflow.com/questions/1634725/select-closest-numerical-value-with-mysql-query by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 엔티티 프레임 워크 6 호출 DB 기능 (0) | 2020.06.11 |
---|---|
[SQL] PHP에서 MySQL의 쿼리를 통해 행에 의해 반복하는 방법 (0) | 2020.06.11 |
[SQL] 데이터와 포스트 그레스와 세트 외래 키 삽입 (0) | 2020.06.11 |
[SQL] SQL 관계형 테이블로 XSD로 변환 (0) | 2020.06.11 |
[SQL] JDBC를 사용하여 dbms_output.get_lines에서 얻기 출력 (0) | 2020.06.11 |