说我有以下数据
Name Value
===============
Small 10
Medium 100
Large 1000
Run Code Online (Sandbox Code Playgroud)
想象一下,这些代表了盒子的数量.我想把一些物品放在盒子里,我想要最小的盒子.我需要一个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
Run Code Online (Sandbox Code Playgroud)
mytable(value)这将有效地使用和上的索引COUNT(STOPKEY)。
有关性能详细信息,请参阅我的博客中的这篇文章: