我有一张记录每月销售额的表格。有关该表格的示例,请参见图片。
所以这个数据是部分的,我自2000年以来每年都有1-12个月。我通常会做的是查询任何一年的总销售额:
FluentValidationModelValidatorProvider.Configure();
我想在这里做的是确定销售额的最高年份和自2000年以来的每年平均销售额。所以我需要每年做一个SUM,并确定哪一年是最高的。然后,一旦我有每年的SUM,我可以得到每年的平均销售额。
我只是不确定如何查询。
谢谢。
答案 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更符合标准,有些则更少。有些人使用TOP
或LIMIT
或其他内容来获取最上一行。有些甚至没有分析功能。
答案 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,您可以获得销售额最高的年度总销售额和平均销售额。希望这有帮助!