SQL - 查找两列值最接近 X 和 Y 的行

5
我正在建设一个网站,人们可以根据自己的体重和身高获取一些信息。 如何构建一个查询,以便给我一个最接近用户输入的两个特定值的行?
我在stackoverflow上找到了这篇文章,对我很有帮助。 我正在尝试完成与那篇文章类似的事情,只是使用2个值而不是1个。

如果X行的值比输入的值高1厘米,重1公斤,那么与另一行值比较,其是“更接近”还是“更远”?另一行的值为比输入的值短0.75厘米,轻1.25公斤。 - Martin Smith
3个回答

3
如果重量和高度同等重要,您可以使用这个(线性)
select top 1 *
from tbl
order by ABS(weight-@weight) + ABS(height-@height)

更好的选择可能是通过一个比例尺来权衡差异,例如将0.01米(1厘米)的高度与1千克的重量视为相等重要。同时,将两边都平方,这样5千克和5厘米的偏差会被认为比10厘米和0千克更加“接近”。
(假设所有输入都是以千克和米作为单位)
select top 1 *
from tbl
order by ABS(weight-@weight)^2 + (ABS(height-@height)*100)^2

哦,我不知道我可以这样做... :) 谢谢您!您的输入将在不到7分钟内被标记为答案 :) - Andrej

1
不要试图使用一些聪明的 SQL 技巧来适应这种情况,为什么不限制用户输入(使用下拉列表、四舍五入到最接近的值等)以匹配数据集中可用的值呢?

0

那么这两者的平均差异呢?我建议将身高差异赋予更高的权重,因为6英寸的差异比6磅的差异更加明显。例如:

SELECT * FROM table
ORDER BY ABS(weight - @weight) + ABS(height - @height)*3

这只是我试图让身高差更加重要的尝试。在这个例子中,我给它一个权重为3。这个例子假设一个人的身高以英寸为单位...如果你用厘米或其他单位可能会更好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接