2015-11-06 149 views
0

我想计算上一年的增长百分比。计算上一年和当年之间的增长百分比

表结构:

CustomerName | Sum_1415 | Sum_1516 

我曾尝试此查询:

select CustomerName, SUM(Sum_1415), SUM(Sum_1516), 
    round(sum(Sum_1516)-Sum(Sum_1415)/(select sum(Sum_1415) from dummy),2) as Percentage 
from dummy 
group by CustomerName 
order by Sum_1415 desc 
limit 15 
+0

很难理解你在做什么。使用当前查询显示一些示例数据,预期输出和问题? –

+0

子查询'(从虚拟中选择总和(Sum_1415))'不会被'客户名称'分组,因此它将成为所有客户的总和。 – Barmar

+0

表结构如上。总额1415包含2014-2015年客户收入,总额1516包含同一客户的收入。我们需要添加需要计算的增长百分比列。 – Fresher

回答

1

sum(Sum_1415)更换子查询(select sum(Sum_1415) from dummy)。否则,您将计算每个客户的增长与上一年所有收入总额的比率,而不是该客户的总额。

您还在ROUND调用中丢失了一些括号,围绕减法sum(Sum_1516)-Sum(Sum_1415)

select CustomerName, SUM(Sum_1415) AS Sum_1415, SUM(Sum_1516) AS Sum_1516, 
    round((sum(Sum_1516)-Sum(Sum_1415))/SUM(Sum_1415),2) as Percentage 
from dummy 
group by CustomerName 
order by Sum_1415 desc 
limit 15 

我可能会重构这个为子查询,所以它不是必要保持重复SUM表达式。

SELECT CustomerName, Sum_1415, Sum_1516, ROUND((Sum_1516-Sum_1415)/Sum_1415, 2) AS Percentage 
FROM (SELECT CustomerName, SUM(Sum_1415) AS Sum_1415, SUM(Sum_1516) AS Sum_1516 
     FROM dummy 
     GROUP BY CustomerName 
     ORDER BY Sum_1516 DESC 
     LIMIT 15) AS x 
+0

我已经尝试了您的查询,但我们没有得到所需的输出。 – Fresher

+0

请更新带有样品输入和所需输出的问题。一个sqlfiddle也会有帮助。 – Barmar

+0

您在“ROUND”调用中添加圆括号之前是否尝试过?您的运营商优先级错误,因此它不会与上一年的差异分开。 – Barmar