在 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)。
你好,我是写作的新手 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)。