表名是SALES哪些产品的销售额在逐年增加?
**PROD_ID** **YEAR** **QUANTITY**
P1 2012 50
P1 2013 40
P1 2014 30
P2 2012 20
P2 2013 30
P2 2014 40
输出应该是P2但如何..?
表名是SALES哪些产品的销售额在逐年增加?
**PROD_ID** **YEAR** **QUANTITY**
P1 2012 50
P1 2013 40
P1 2014 30
P2 2012 20
P2 2013 30
P2 2014 40
输出应该是P2但如何..?
这个怎么样?
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)
);
我的输出应该只有P2,因为产品P2销售增加,如果你检查我的表数据 –
根据你的数据看起来总是比较2012年的数据和2014年的数据。戈登的答案是这样做的,并且也将P1排除在输出之外。我认为我们不知道你在找什么。 – shawnt00
@ shawnt00..'increasing年明智的问题说..所以我认为应该有每年增加 –
一个稍微复杂的方法来完成这与cte
s。
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)
仅仅通过prod_id总结(df)= count(*)'来从差异组中说'比较清楚吗?我想知道你是否有理由这样做,加入。 – shawnt00
是啊..它会是相同的,实际上几行代码较小..但我更喜欢写这种方式更好地理解..也包括你的建议.. @ shawnt00 –
非常感谢你.. –
是否每年都在增加或仅在最终结果? –
只有最终结果,因为如果你检查产品P2的数量,那么它增加一年,所以我的输出应该是P2 –