Mysql 基于分组数据获取平均值

Mysql 基于分组数据获取平均值,mysql,sql,mariadb,Mysql,Sql,Mariadb,我试图根据前几年的数据,找出某个月的平均净销售额,以帮助显示销售的季节性趋势 我有一张名为Invoice的表格,它看起来类似于下面为本帖而精简的表格: ID-int 发布日期-日期 净小数 状态-枚举 例如,我试图获取的数据类似于: (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) =

我试图根据前几年的数据,找出某个月的平均净销售额,以帮助显示销售的季节性趋势

我有一张名为Invoice的表格,它看起来类似于下面为本帖而精简的表格:

ID-int 发布日期-日期 净小数 状态-枚举 例如,我试图获取的数据类似于:

(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
但是,在一年中的整整12个月里,根据所有数据(不仅仅是2018年到2020年)这样做

我对如何提取这些数据有点困惑。我尝试过,甚至尝试过在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的行中获取总数,但首先尝试破解第一部分。正如他们所说,先走后跑


非常感谢您的指导

对于平均金额部分,您可以使用如下查询

从您的_表中选择日期,其中的日期类似于'20_uuu-06-%'


您可以将其按asc desc顺序排列。

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

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;

更多没有棒棒糖的棍子谢谢你@Gordon Linoff!这似乎完成了任务。谢谢你的帮助!