说我有以下数据
Name Value
===============
Small 10
Medium 100
Large 1000
想象一下,这些代表盒子的体积。我有一些要放入包装盒中的物品,并且希望有最小的包装盒。我需要一个SQL查询,该查询将:
很容易将其分为两个查询(即,首先查询点1,如果未返回任何行,则从表中选择最大的数字)。但是,如果可能的话,我喜欢在一个查询中执行操作以消除开销(代码和上下文切换),并且看起来应该可以执行。这可能很明显,但是太阳整天都照在我身上,我想不到!
因此,例如,如果您使用5的参数,我希望查询返回10;如果使用15的参数,则查询返回100;如果使用大于100的值(包括大于1000的数字),则查询将返回10。
我使用的是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/