繁体   English   中英

SQL SUM和按年平均销售额

[英]SQL SUM and Average Sale by Years

我有一张表,记录月度销售额。 请参阅图片以获取表格样本。 在此处输入图片说明

因此,该数据是不完整的,自2000年以来,我每年有1-12个月的时间。我通常要做的是查询任何一年的总销售额,如下所示:

SELECT SUM(total_sales) as TotalSalesYear FROM sales_report WHERE year =  '2008'

我在这里要做的是确定自2000年以来的最高销售年份和每年的平均销售额。因此,我需要每年进行SUM,并确定哪一年是最高的。 然后,一旦有了每年的SUM,我就可以得出平均每年的销售额。

我只是不确定如何查询此。

谢谢。

逐年分组以获取每年的结果记录。 按销售额递减的顺序对其进行排序,并将结果限制为1行,这样您就可以得出销售额最高的年份。

此外,我们使用AVG的分析版本来获取每年记录中所有金额的AVG (最后我们只显示其中一项)。 从查询中删除最后一行(即仅提取子句)以查看其工作方式。

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或其他方法仅获得第一行。 还有一些甚至没有分析功能。

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

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

为了获得销售最高的年份,您可以按以下顺序使用订单和限制来扩展该年份:

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;
  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,您可以获取最高销售额的当年的总销售额和平均销售额。 希望这可以帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM