这是相当棘手的复制窗口函数。 fetch with ties 返回第n行,然后返回具有相同值的所有行。因此,一种方法是:
select s.*
from sales *
where s.unit_price <= (select s2.unit_price
from sales s2
order by unit_price
limit 4, 1
);
这并不准确,因为如果行数少于5行,它就不起作用。另一种使用窗口函数的方法更易于修复:
select s.*
from (select s.*,
max(case when seqnum = 5 then unit_price end) over () as unit_price_5
from (select s.*,
row_number() over (order by unit_price) as seqnum
from s
) s
) s
where unit_price <= unit_price_5 or
unit_price_5 is null;
甲骨文订货人。。fetch next n rows with tires用于将返回的前n(order by)行数限制为next(first)指定的行数。而with tires意味着如果某些行具有相同的order by值,那么除了指定的行数之外,还将返回它们。 配置单元没有获取功能。有限制,这不支持与轮胎。 您可以使用函数u rank()和where filter实现类似的功能。例如,我们需要以最低的价格获得5笔销售,如果有相同价格的销售,也要退货。密集的排名将分配相同的排名,以相同的价格行。
select *
from
(
select s.*,
dense_rank() over(order by unit_price) rnk --lowest unit_price first
--to get highest price, use order by unit_price DESC
from sales s
)
where rnk<=5 --If there are rows with the same rank, they all will be returned
order by rnk
2条答案
按热度按时间dfddblmv1#
这是相当棘手的复制窗口函数。
fetch with ties
返回第n行,然后返回具有相同值的所有行。因此,一种方法是:这并不准确,因为如果行数少于5行,它就不起作用。另一种使用窗口函数的方法更易于修复:
请注意,没有任何内置窗口函数可以处理这种情况。例如,如果价格是:
那么
row_number()
只返回前5个1
s。dense_rank()
以及rank()
将返回所有行。hkmswyz62#
甲骨文订货人。。fetch next n rows with tires用于将返回的前n(order by)行数限制为next(first)指定的行数。而with tires意味着如果某些行具有相同的order by值,那么除了指定的行数之外,还将返回它们。
配置单元没有获取功能。有限制,这不支持与轮胎。
您可以使用函数u rank()和where filter实现类似的功能。例如,我们需要以最低的价格获得5笔销售,如果有相同价格的销售,也要退货。密集的排名将分配相同的排名,以相同的价格行。