如何按月汇总销售额并进行比较

Posted

技术标签:

【中文标题】如何按月汇总销售额并进行比较【英文标题】:How to sum sales by months and compare them 【发布时间】:2016-04-15 20:21:14 【问题描述】:

我有一张名为 SOITEM 的桌子。在该表中,TOTALPRICE 列必须相加并得出按月计算的总销售额,其中包含日期的列称为 DATELASTFULFILLMENT。 我想比较 2014 年 1 月和 2015 年 1 月的销售表,然后是 2014 年 2 月和 2015 年 2 月,依此类推。

到目前为止,我得到了这个,但我不确定如何继续。

Select SUM(SOITEM.TOTALPRICE)
FROM SOITEM
WHERE DATELASTFULFILLMENT>='2014-01-31' AND DATELASTFULFILLMENT<='2014-01-31' 

但它只会导致 2014 年 1 月的总数.... 谢谢你。

【问题讨论】:

一种使用 PIVOT 查看数据的方法 sqlfiddle.com/#!3/fe629/2 【参考方案1】:

您可以考虑使用日期字段中的月/年对结果进行分组,然后为每个组计算 SUM()

  SELECT DATEPART(Year, DATELASTFULFILLMENT) AS [Year], 
         DATEPART(Month, DATELASTFULFILLMENT) AS [Month], 
         SUM(TOTALPRICE) AS Total
    FROM SOITEM
GROUP BY DATEPART(Year, DATELASTFULFILLMENT), DATEPART(Month, DATELASTFULFILLMENT)
ORDER BY [Year], [Month]

您可以see an interactive example of this here,结果如下所示:

【讨论】:

【参考方案2】:

这适用于 mysql。我认为 MS SQL 应该是一样的。

Select SUM(SOITEM.TOTALPRICE)
FROM SOITEM
WHERE DATELASTFULFILLMENT>='2014-01-31' AND DATELASTFULFILLMENT<='2014-01-31' 
UNION
Select SUM(SOITEM.TOTALPRICE)
FROM SOITEM
WHERE DATELASTFULFILLMENT>='2015-01-31' AND DATELASTFULFILLMENT<='2015-01-31' 
UNION
Select SUM(SOITEM.TOTALPRICE)
FROM SOITEM
WHERE DATELASTFULFILLMENT>='2014-02-31' AND DATELASTFULFILLMENT<='2014-02-31' 
UNION
Select SUM(SOITEM.TOTALPRICE)
FROM SOITEM
WHERE DATELASTFULFILLMENT>='2014-02-31' AND DATELASTFULFILLMENT<='2015-02-31' 

【讨论】:

【参考方案3】:

在您的选择语句中使用嵌套查询——注意在嵌套查询中减去 YEAR 以拉回上一年的摘要:

SELECT MONTH(so2.DATELASTFULFILLMENT) AS MonthFulfilled, 
YEAR(so2.DATELASTFULFILLMENT) AS YearFulfilled, 
SUM(so2.TOTALPRICE), 
(SELECT SUM(SOITEM.TOTALPRICE) FROM SOITEM WHERE MONTH(DATELASTFULFILLMENT) = MONTH(so2.DATELASTFULFILLMENT) AND YEAR(DATELASTFULFILLMENT) = (YEAR(so2.DATELASTFULFILLMENT)-1)) AS LastYearTotal
FROM SOITEM AS so2
GROUP BY MONTH(so2.DATELASTFULFILLMENT), YEAR(so2.DATELASTFULFILLMENT)

【讨论】:

【参考方案4】:

或者你可以这样做。

WITH MonthTotal AS
(
    SELECT
        DATEADD(MONTH, DATEDIFF(MONTH, 0, DATELASTFULFILLMENT), 0) AS MonthDate
    ,   SUM(TOTALPRICE) AS Total

    FROM
        SOITEM

    GROUP BY
        DATEADD(MONTH, DATEDIFF(MONTH, 0, DATELASTFULFILLMENT), 0)
)

SELECT
    MonthTotal.MonthDate
,   MonthTotal.Total
,   PreviousYear.Total AS PreviousYearTotal

FROM
    MonthTotal
    LEFT JOIN MonthTotal AS PreviousYear
        ON  DATEADD(YEAR, -1, MonthTotal.MonthDate) = PreviousYear.MonthDatee) = PreviousYear.MonthDate

您首先根据月份日期对结果进行分组,计算将日期转换为日期所在月份的 1 号。然后我们使用这些结果并将其加入到去年的结果中。

【讨论】:

以上是关于如何按月汇总销售额并进行比较的主要内容,如果未能解决你的问题,请参考以下文章

MySql Group 并按月汇总每个部门全年的销售额,加入多个表

PowerBI DAX计算:按月的移动平均线组计算

NSFetchRequest 按月分组

按月分组销售额 - Rails

SQL Server 2008 R2-查询以获取按月销售的总销售额和数量

python / pandas中的条件聚合