如何从以下查询中选择前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
超级软-500毫升32879 29
德塔法斯特染色残留物-100毫升29382
德塔法斯特染色残留物-800毫升27336
Detafast着色剂残留物-200 24516
纯软洗涤剂-500毫升21147
纯软洗涤剂-250毫升20675 6
纯软洗涤剂-100毫升-额外19693,5
纯软洗涤剂-200毫升17563,74
超软-250毫升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 ;我得到了结果:
超级软-500毫升670,08
纯软洗涤剂-100毫升-额外597
纯软洗涤剂-200毫升338,3
Detafast染色残留物-100 246 246
Detafast染色残留物-200 213 213
超软-1升179,64升
所以在我的情况下这不是一个解决办法。
发布于 2014-12-17 11:44:27
在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发布于 2014-12-17 10:16:53
您可以在查询的同时使用ROWNUM <= 10。
发布于 2014-12-17 13:59:49
Rownum只返回指定的行,因为它们最初是由查询检索的。
在您的示例中,将rownum应用于查询,因为您已经返回查询获取的前十行,然后对它们进行排序。请注意,您返回的10个结果确实是按其应有的顺序排列的,它们不是您想要的10个项目。
要实现您想要的前十位列表,您必须首先执行您的查询,根据您的需要对结果排序,然后应用行数。这可以通过将初始查询转换为封装在应用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]https://stackoverflow.com/questions/27523116
复制相似问题