说我有以下数据
Name Value
===============
Small 10
Medium 100
Large 1000
想象一下,这些代表盒子的体积。我有一些东西想放在盒子里,我想要尽可能小的盒子。我需要一个 SQL 查询,它将:
很容易将其拆分为两个查询(即首先查询点 1,如果没有返回行,则从表中选择最大的数)。但是,如果可能的话,我喜欢在一个查询中做一些事情以消除开销(代码和上下文切换),而且看起来应该可以做到。这可能很明显,但是太阳一整天都照在我身上,我无法思考!
例如,如果您使用 5 的参数,我希望查询返回 10,如果您使用 15 的参数,则返回 100,如果您使用大于 100 的任何值(包括大于 1000 的数字),我希望查询返回 1000。
我使用的是 Oracle 11g,所以任何特殊的 Oracle 优点都可以。
最佳答案
SELECT *
FROM (
SELECT *
FROM (
SELECT *
FROM mytable
WHERE value > 10000
ORDER BY
value
)
UNION ALL
SELECT *
FROM (
SELECT *
FROM mytable
ORDER BY
value DESC
)
)
WHERE rownum = 1
这将有效地使用
mytable(value)
上的索引和 COUNT(STOPKEY)
.有关性能详细信息,请参阅我博客中的这篇文章:
关于sql - 查找表中大于某个值的最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/769069/