如何从以下查询中选择前10行?
select dim_product.PRODUCT_NAME, sum(units_sold * (revenue - cost))
from FT_SALES
INNER JOIN dim_product
ON ft_sales.prod_dwh_id = dim_product.product_dwh_id
group by dim_product.PRODUCT_NAME
order by 2 desc;
---我尝试了使用ROWNUM的建议。
没有ROWNUM我得到以下结果
超软散装 - 2升48223,5
超软 - 1升38842,16
超柔软 - 500ml 32879,29
Detafast去污剂 - 100ml 29382
Detafast去污剂 - 800ml 27336
Detafast去污剂 - 200ml 24516
纯软洗涤剂 - 500ml 21147
纯软洗涤剂 - 250ml 20675,6
纯软洗涤剂 - 100ml - 额外19693,5
纯软洗涤剂 - 200ml 17563,74
超柔软 - 250ml 17430
超软 - 产品样本-2647,8
当添加ROWNUM时:
select dim_product.PRODUCT_NAME, sum(units_sold * (revenue - cost))
from FT_SALES
INNER JOIN dim_product
ON ft_sales.prod_dwh_id = dim_product.product_dwh_id
where ROWNUM<=10
group by dim_product.PRODUCT_NAME
order by 2 desc ;
我得到了结果:
Super Soft - 500ml 670,08
纯软洗涤剂 - 100ml - 额外597
纯软洗涤剂 - 200ml 338,3
Detafast去污剂 - 100ml 246
Detafast去污剂 - 200ml 213
超软 - 1升179,64
所以这不是我的解决方案。
答案 0 :(得分:5)
在Oracle中使用rownum
进行选择时,需要使用子查询:
select p.*
from (select dim_product.PRODUCT_NAME, sum(units_sold * (revenue - cost))
from FT_SALES INNER JOIN
dim_product
ON ft_sales.prod_dwh_id = dim_product.product_dwh_id
group by dim_product.PRODUCT_NAME
order by 2 desc
) p
where rownum <= 10
答案 1 :(得分:1)
您可以将ROWNUM&lt; = 10与查询一起使用。
答案 2 :(得分:1)
Rownum只返回指定的行,因为它们最初是由查询检索的。
在您的示例中,将rownum应用于查询时返回查询提取的前十行,然后对它们进行排序。请注意,您的10个返回结果确实按照它们的顺序排列,它们不是您想要的10个项目。
要按照您的意图获得前十名列表,您必须先执行查询,根据需要订购结果,然后应用rownum。这可以通过将初始查询转换为包含在应用rownum条件的外部查询中的子查询来实现。
一般来说,这看起来像是:
select [whichever fields you need]
from (
[query which collects and then sorts desired data]
)
where rownum [is less than, greater than, equal to, or whatever else you need it to be]
答案 3 :(得分:0)
将其包裹在另一个选择中并按rownum过滤。
SELECT * FROM (...) WHERE ROWNUM <= 10