2015-10-20 106 views
0

表名是SALES哪些产品的销售额在逐年增加?

**PROD_ID** **YEAR** **QUANTITY** 
    P1    2012   50 
    P1    2013   40 
    P1    2014   30 
    P2    2012   20 
    P2    2013   30 
    P2    2014   40 

输出应该是P2但如何..?

+0

是否每年都在增加或仅在最终结果? –

+0

只有最终结果,因为如果你检查产品P2的数量,那么它增加一年,所以我的输出应该是P2 –

回答

2

这个怎么样?

select prod_id 
from sales 
group by prod_id 
having (sum(case when year = 2014 then quantity else 0 end) > 
     sum(case when year = 2012 then quantity else 0 end) 
     ); 
+0

我的输出应该只有P2,因为产品P2销售增加,如果你检查我的表数据 –

+0

根据你的数据看起来总是比较2012年的数据和2014年的数据。戈登的答案是这样做的,并且也将P1排除在输出之外。我认为我们不知道你在找什么。 – shawnt00

+0

@ shawnt00..'increasing年明智的问题说..所以我认为应该有每年增加 –

2

一个稍微复杂的方法来完成这与cte s。

Fiddle with sample data

with diff as ( 
select prod_id , 
case when quantity - nvl(lag(quantity) over(partition by prod_id order by yr),0) > 0 
then 1 else 0 end as df 
from sales 
) 
,totdiff as (select prod_id, sum(df) totdf from diff group by prod_id) 
, totals as (select prod_id, count(*) cnt from sales group by prod_id) 
select d.prod_id 
from totdiff d join totals t on t.prod_id = d.prod_id and d.totdf = t.cnt 

编辑:由@ shawnt00在comments..the查询建议可以简化为

with diff as ( 
select prod_id , 
case when quantity - nvl(lag(quantity) over(partition by prod_id order by yr),0) > 0 
then 1 else 0 end as df 
from sales 
) 
select prod_id 
from diff 
group by prod_id 
having count(*) = sum(df) 
+0

仅仅通过prod_id总结(df)= count(*)'来从差异组中说'比较清楚吗?我想知道你是否有理由这样做,加入。 – shawnt00

+0

是啊..它会是相同的,实际上几行代码较小..但我更喜欢写这种方式更好地理解..也包括你的建议.. @ shawnt00 –

+0

非常感谢你.. –

相关问题