在 ORACLE 中使用 TOP SQL 9

Using TOP in ORACLE SQL 9

你好,我是写作的新手 SQL,我正在尝试找到在 Oracle SQl 9:

中使用 TOP 的合适方法

我的例子:

select * from example e, test t
where e.id = t.id
and country = 'USA'
order by state ASC;

我想做的是获取查询的底部 20%,但我知道您不能使用 TOP。经过研究,我仍然没有找到适用的答案。我知道你必须先订购它们,但我不确定如何取最低的 20%(这将是最高的,因为订单是 ASC)

如果按升序排序可以得到最高的集合,那么按降序排序肯定可以得到最低的集合。

此解决方案使用函数 NTILE() 将记录分为五个桶。第一个桶是我们想要的集合(因为是降序排列的)。按升序排序取第五个五分位数结果相同。

select * from (
    select e.*
           , t.*
           , ntile(5) over (order by state desc) nt 
    from example e, test t
    where e.id = t.id
    and country = 'USA'
)
where nt = 1 
order by state desc
/

你没说你的排序标准是什么,我猜的。

一般来说(例如,如果您想要顶部或底部 17.2% 的行),您可以使用 row_number()count()(分析函数)来获取结果。

20% 更容易 - 您正在寻找最高(或最低)的五分之一。为此,您可以使用 ntile() 函数,如下所示:

select [column_names]
from (
       select e.*, t.*, ntile(5) over (order by state) as nt
       from .....  etc
     )
where nt = 1;

子查询是您的查询。外部查询中的 column_names 是您实际需要的任何内容;您也可以使用 select * 但这也会显示 ntile(所有行中均为 1)。