如何在 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 中选择最接近的值,但仅当该值较大时?的主要内容,如果未能解决你的问题,请参考以下文章
如何计算表中的值并返回true,仅当使用php mysql找到该值5次时