【问题标题】:How to find the nearest row based on two integer columns?如何根据两个整数列找到最近的行?
【发布时间】:2019-11-07 14:03:12
【问题描述】:

这是一个 MySQL 表,它有 3 行。

ram cpu
  1   2
  4   8
  8  16

如果我将输入作为 ram=7 和 cpu=9,

查询必须根据两个输入值巧妙地选择最接近的行并返回一行。

我期望 7,9 组合的示例结果:

ram cpu
4    8

这可能实现吗?

考虑一下我有成千上万个这样的组合。我需要一个始终巧妙地返回单行的查询。

【问题讨论】:

  • 你好。您应该指定最接近的意思。是最小 (abs(ram-given_ram) + abs(cpu - given_cpu)) 的行吗?
  • 相同重量? (或者 CPU 比 RAM 更重要还是更重要?)
  • 该行包含这两个输入中最接近的。

标签: mysql sql database select


【解决方案1】:

鉴于涉及两列,您从未向我们提供“最接近”含义的确切启发式方法。假设您可以接受与两个输入值的绝对差之和最小的记录,那么这是一种方法:

SELECT ram, cpu
FROM yourTable
ORDER BY
    ABS(ram - 7) + ABS(cpu - 9)
LIMIT 1;

Demo

【讨论】:

  • @Strawberry 好吧,pi 包含数字 8,所以这绝对是一个来源!
  • 来自我的网络应用程序中的输入框
猜你喜欢
  • 1970-01-01
  • 2016-03-23
  • 2015-11-26
  • 1970-01-01
  • 2016-01-30
  • 2021-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多