如何在 SQL 中选择最接近的值,但仅当该值较大时?

Posted

技术标签:

【中文标题】如何在 SQL 中选择最接近的值,但仅当该值较大时?【英文标题】:How can I select the closest value in SQL,but only when that value is bigger? 【发布时间】:2019-12-16 16:00:38 【问题描述】:

我有下表中的一些数据:

+----+--------+--------+--------+-------+ 
| id | length | weight | height | width |
+----+--------+--------+--------+-------+
| 1  | 10     | 45     | 80     | 20    |
+----+--------+--------+--------+-------+
| 2  | 30     | 55     | 70     | 32    |
+----+--------+--------+--------+-------+
| 3  | 30     | 65     | 80     | 21    |
+----+--------+--------+--------+-------+

我想选择最接近长度和高度的值,但它必须大于我指定的值。例如,如果我在输入中写:

1)Length=20 and height=68 it should return id=2
2)Length=20 and height=71 it should return id=3

我已经尝试过(例如第一种情况),但出现语法错误:

SELECT TOP 1 * FROM `elements` ORDER BY length-20 AND height-68

我该怎么做?

【问题讨论】:

【参考方案1】:

使用WHERE 子句仅返回具有“更大”值的行。

SELECT *
FROM `elements`
where Length >= 20 and height >= 68
ORDER BY length + height
LIMIT 1

ORDER BY 将首先对长度 + 高度较小的行进行排序。使用LIMIT 1 选择最小的。

【讨论】:

这对我不起作用。我正在使用 phpMyAdmin,但出现语法错误,我不知道为什么。此外,当我执行语句时,它会在末尾添加:'LIMIT 0, 25'。如果我不写“Top 1”,它会起作用,但它会返回很多行,但是当我写“Top 1”时,会出现语法错误 现在是 mysql 语法。【参考方案2】:

使用where

SELECT TOP (1) e.*
FROM elements e
WHERE length >= 20 AND height >= 20
ORDER BY length * height;

您没有具体说明“亲近”的含义。这会使用整个区域。

【讨论】:

这对我不起作用。我正在使用 phpMyAdmin,但出现语法错误,我不知道为什么。此外,当我执行语句时,它会在末尾添加:'LIMIT 0, 25'。如果我不写“Top 1”,它会起作用,但它会返回很多行,但是当我写“Top 1”时,会出现语法错误【参考方案3】:

例如,length 的重要性是 height 两倍的版本。

SELECT TOP 1 * 
FROM myTable
where Length >= 20 and height >= 68
ORDER BY 2*(length-20) + (height-68)

【讨论】:

【参考方案4】:

我不知道为什么,但“TOP 1”对我不起作用。我终于解决了这样的问题

SELECT * FROM `elements`
WHERE Length >= 20 and height >= 68
ORDER BY length + height 
LIMIT 1

【讨论】:

以上是关于如何在 SQL 中选择最接近的值,但仅当该值较大时?的主要内容,如果未能解决你的问题,请参考以下文章

R - 如何在NA中填写值,但仅当结束值与起始值相同时?

仅当表中不存在该值时才更新 SQL 列

如何计算表中的值并返回true,仅当使用php mysql找到该值5次时

覆盖 Qt MouseEvent 但仅当类变量为 True 时

选择除以 2 后余数(模)为 1 的行?

选择最接近的值小于给定值的条目