首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查询包含GROUP BY子句时,ORACLE中的前10行

查询包含GROUP BY子句时,ORACLE中的前10行
EN

Stack Overflow用户
提问于 2014-12-17 10:13:40
回答 4查看 6.6K关注 0票数 2

如何从以下查询中选择前10行?

代码语言:javascript
复制
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时:

代码语言:javascript
复制
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升

所以在我的情况下这不是一个解决办法。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-12-17 11:44:27

在Oracle中选择使用rownum时,需要使用子查询:

代码语言:javascript
复制
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
票数 6
EN

Stack Overflow用户

发布于 2014-12-17 10:16:53

您可以在查询的同时使用ROWNUM <= 10。

票数 1
EN

Stack Overflow用户

发布于 2014-12-17 13:59:49

Rownum只返回指定的行,因为它们最初是由查询检索的。

在您的示例中,将rownum应用于查询,因为您已经返回查询获取的前十行,然后对它们进行排序。请注意,您返回的10个结果确实是按其应有的顺序排列的,它们不是您想要的10个项目。

要实现您想要的前十位列表,您必须首先执行您的查询,根据您的需要对结果排序,然后应用行数。这可以通过将初始查询转换为封装在应用rownum条件的外部查询中的子查询来实现。

一般来说,这看起来类似于:

代码语言:javascript
复制
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]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27523116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档