2016-11-11 38 views
1

enter image description here准备月度销售报告谁拥有最大的销售客户,为下表

准备谁拥有最大的销售客户的月度销售报告,为下表

+0

可能有用的:http://stackoverflow.com/questions/9220944/oracle-getting-maximum-value-of-a-group –

+0

请定义“月度销售报告” - 这不是一个标准的术语,所以你必须解释一下。除此之外,发布你的作业并寻求帮助是可以的 - 但你必须展示你的工作:你尝试过什么,什么不起作用,输出与预期的不同,等等。这不是“做我的家庭作业“网站(尽管有时感觉就像是这样)。 – mathguy

+0

我投票结束这个问题作为题外话,因为 - 根据网站规则,当你要求志愿者帮助你完成作业时,你必须展示你的工作。 – mathguy

回答

0

这是如何你可以在“一”查询检索一个例子:

  • 谁拥有最大的销售客户的ID
  • 该客户的销售汇总

首先带来的CUSTOMER_ID和销售的相应的总结查询是这样的:

select customer_id, sum(sales) as sumsales from mytable group by customer_id; 

这个疑问,等级已被添加到销售摘要的降序排列。这将允许稍后根据其等级选择单个记录。因此,一个包装是必要的:

select customer_id, sumsales, rank() over (order by sumsales desc) as rnk from 
    (select customer_id, sum(sales) as sumsales from mytable group by customer_id); 

现在的排名条目是可用的,排名第一的记录,必须选择:

select customer_id, sumsales from 
    (select customer_id, sumsales, rank() over (order by sumsales desc) as rnk from 
     (select customer_id, sum(sales) as sumsales from mytable group by customer_id) 
    ) 
where rnk=1; 

然而,这未必是实现最有效的方法这个。

编辑:

为了避免一个包裹层,只是添加的等级,有可能秩foeld添加到第一内部查询:

select customer_id, sum(sales) as sumsales, rank() over (order by sum(sales) desc) as rnk 
from mytable group by customer_id; 

然后,单个需要包装的查询,选择排名第一的记录为:

select customer_id, sumsales from (
    select customer_id, sum(sales) as sumsales, rank() over (order by sum(sales) desc) as rnk 
    from mytable group by customer_id 
) 
where rnk=1; 

参考其他类似的相关答案here