基于分组数据获取平均值

qgzx9mmu  于 2021-07-29  发布在  Java
关注(0)|答案(2)|浏览(293)

我试图根据前几年的数据,找出一个月的平均净销售额,以帮助显示销售的季节性趋势。
我有一张名为“invoice”的表格,看起来类似于下面的表格(为了这篇文章的目的缩小了):
id-内部
发布日期-日期
净值-十进制
状态-枚举
例如,我试图获取的数据类似于:

(sum of invoices in June 2018 + sum of invoices in June 2019 + sum of invoices in June 2020) divided by number of years covered (3) = Overall average for June

但是,根据所有的数据(不仅仅是2018年到2020年),在一年的整整12个月里都是这样做的。
我对如何提取这些数据有点困惑。我尝试过子查询,甚至尝试过在avg select中使用sum,但是查询要么失败,要么返回不正确的数据。
我尝试过的一个例子:

SELECT MONTHNAME(`Invoice`.`IssueDate`) AS `CalendarMonth`, AVG(`subtotal`)
FROM (SELECT SUM(`Invoice`.`NetTotal`) AS `subtotal`
        FROM `Invoice`
        GROUP BY EXTRACT(YEAR_MONTH FROM `Invoice`.`IssueDate`)) AS `sub`, `Invoice`
GROUP BY MONTH(`Invoice`.`IssueDate`)

返回:

我看到了这个查询的两个部分,但不确定如何构造它:
基于月份的所有数据的总和和计数
基于年数的平均值
我不知道从这里到哪里去,如果有人指点我会很感激的。
理想情况下,我希望从“status”=“paid”的行中获取总数,但首先尝试破解第一部分。像他们说的先走后跑!
非常感谢您的指导!

tsm1rwdh

tsm1rwdh1#

基本上,您需要两个聚合级别:

SELECT mm,  AVG(month_total)
FROM (SELECT YEAR(i.IssueDate) as yyyy, MONTH(i.issueDate) as mm,
             SUM(i.`NetTotal`) as month_total
      FROM Invoice i
      GROUP BY yyyy, mm
     ) ym
GROUP BY mm;
kiz8lqtg

kiz8lqtg2#

对于平均金额部分,您可以使用如下查询 Select Date From Your_Table Where Date Like '20__-06-%' 你可以按顺序排列。

相关问题