如何在SQL中获取近似行

时间:2017-11-11 04:47:52

标签: mysql

我希望在存储的行数据中获得与输入值最接近的值的行。我该如何撰写查询?

ex)

index  name   score
--------------------
  1    Jun     30
  2    Ann    -16
  3    Mick    54
  4    Kki     21
 ...

input : 25
--> result : 4, Kki, 21

1 个答案:

答案 0 :(得分:0)

我不确定ex)是否是迷路打字,或者是你的桌子名称。我们假设您的表格为t,您的输入存储为@input=25

set @input=cast(25 as signed);

Select t.index, t.name, t.score
from
  (select 
    index
  , abs(score - @input)
  from t
  order by 2
  limit 1) as sq 
inner join t using (index);

...如果你的表是一个临时表,它会给你一个关于无法两次打开同一个表的错误。在这种情况下,您可能需要以下代码。

create temporary table t2 like t;
insert into t2 
  select * from t;

...并且您将t的两个引用之一替换为t2。如果它是一个永久性的表,你不应该这样做。

除此之外,代码的工作原理是首先找到行的值与参考值之间的绝对差值最小的行。 (我们排序,默认情况下从最小到最大排序,并将返回的行限制为单个结果。)来自子查询的这一行连接回索引上的表。