SQL SUM和按年计算的平均销售额

时间:2016-04-25 20:49:09

标签: sql

我有一张记录每月销售额的表格。有关该表格的示例,请参见图片。enter image description here

所以这个数据是部分的,我自2000年以来每年都有1-12个月。我通常会做的是查询任何一年的总销售额:

FluentValidationModelValidatorProvider.Configure();

我想在这里做的是确定销售额的最高年份和自2000年以来的每年平均销售额。所以我需要每年做一个SUM,并确定哪一年是最高的。然后,一旦我有每年的SUM,我可以得到每年的平均销售额。

我只是不确定如何查询。

谢谢。

3 个答案:

答案 0 :(得分:1)

逐年分组,以获得每年的结果记录。按销售额下降订购,并将结果限制为1行,这样您就获得了最大销售额的年份。

此外,我们使用AVG的分析版本获得每年记录的所有金额(我们最后只显示一个)的平均值。从查询中删除最后一行(即fetch only子句)以查看它是如何工作的。

select 
  year, 
  sum(total_sales) as sum_of_year, 
  avg(sum(total_sales)) over () as avg_sum
from sales_report 
group by year
order by sum(total_sales) desc
fetch first 1 row only;

SQL小提琴:http://sqlfiddle.com/#!15/fee30/5

这是标准SQL,但不适用于每个DBMS。有些DBMS更符合标准,有些则更少。有些人使用TOPLIMIT或其他内容来获取最上一行。有些甚至没有分析功能。

答案 1 :(得分:0)

以下是问题第二部分的解决方案。这将计算所有年份的销售总额的平均值:

SELECT avg(sum_sales) 
FROM (
      SELECT year as year, sum(total_sales) as sum_sales     
        FROM sales 
    GROUP BY year
) AS T;

为了获得销售额最高的年份,您可以使用order by和limit来扩展它,如下所示:

SELECT year, sum_sales   
  FROM ( 
       SELECT year as year, sum(total_sales) as sum_sales            
         FROM sales        
        GROUP BY year) AS T 
 ORDER BY sum_sales desc 
 LIMIT 1;

答案 2 :(得分:0)

  select rank()over (  order by total_sale) rnk,
 year, total_sale, avg_sale
    from (select year, 
sum(total_sales) total_sale,
 avg(total_sales) avg_sale
 from sales_report group by year)

此查询提供每年的排名。 rnk = 1是销量最高的一年。通过说rnk = 1,您可以获得销售额最高的年度总销售额和平均销售额。希望这有帮助!