【问题标题】:Find percentage increase from previous year查找比上一年增加的百分比
【发布时间】:2018-04-22 00:46:55
【问题描述】:

说实话,我不知道从哪里开始这个脚本。我可以从销售表中生成显示每月销售总收入的结果。

以下脚本:

SELECT coalesce(date_format(TRANSACTION_DATE, '%M'), 'Grand Total') AS MONTH,
ROUND(SUM(SALES_AMOUNT),2) TOTAL
FROM SALES
WHERE YEAR(TRANSACTION_DATE) = 2018
GROUP BY month

结果:(很好,工作正常)

Month   Total
January 45163.22
February    34531.15
March   44194.98
April   30826.68
May 39016.04
June    37284.25
July    37640.08
August  39703.85
September   34958.94
October 34447.61
November    39161.9
December    36986.16

但是,我想产生以下结果...即 Jan 为 NULL,而二月的差异为 -10632.07,相当于减少了 23.54%

        Difference  Percentage Increase/Decrease
January 45163.22        
February    34531.15    -10632.07   -23.54
March   44194.98    9663.83 27.99
April   30826.68    -13368.3    -30.25
May 39016.04    8189.36 26.57
June    37284.25    -1731.79    -4.44
July    37640.08    355.83  0.95
August  39703.85    2063.77 5.48
September   34958.94    -4744.91    -11.95
October 34447.61    -511.33 -1.46
November    39161.9 4714.29 13.69
December    36986.16    -2175.74    -5.56

希望这是有道理的,如果有人可以帮助我,那就太好了。

谢谢

【问题讨论】:

  • 什么 MySQL 版本?

标签: mysql


【解决方案1】:

你可以使用连接

    select a.MONTH, a.TOTAL, a.TOTAL - b.TOTAL,  ((a.TOTAL - b.TOTAL)/ a.TOTAL )*100
    from (

    SELECT coalesce(date_format(TRANSACTION_DATE, '%M'), 'Grand Total') AS MONTH,
    ROUND(SUM(SALES_AMOUNT),2) TOTAL
    FROM SALES
    WHERE YEAR(TRANSACTION_DATE) = 2018
    GROUP BY month
     ) a
    inner  join (
    SELECT coalesce(date_format(TRANSACTION_DATE, '%M'), 'Grand Total') AS MONTH,
    ROUND(SUM(SALES_AMOUNT),2) TOTAL
    FROM SALES
    WHERE YEAR(TRANSACTION_DATE) = 2017
    GROUP BY month
     ) b ON a.month = b.month  

【讨论】:

    【解决方案2】:

    通过在当月加入 SALES,并将第二次 SALES 限制在上一年,您将获得两年的匹配月份。

    SELECT 
        coalesce(date_format(a.`TRANSACTION_DATE`, '%M'), 'Grand Total') AS `MONTH`,
        ROUND(SUM(a.`SALES_AMOUNT`),2) AS `TOTAL_2018`,
        ROUND(SUM(b.`SALES_AMOUNT`),2) AS `TOTAL_2017`,
        ROUND(SUM(a.`SALES_AMOUNT`),2) - ROUND(SUM(b.`SALES_AMOUNT`),2) AS `Difference`,
        ROUND((ROUND(SUM(a.`SALES_AMOUNT`),2) - ROUND(SUM(b.`SALES_AMOUNT`),2)) / ROUND(SUM(b.`SALES_AMOUNT`),2),2) AS `Percentage_Difference`
    FROM `SALES` a
    JOIN `SALES` b
    ON YEAR(b.`TRANSACTION_DATE`) = YEAR(a.`TRANSACTION_DATE`) - 1 AND 
        MONTH(a.`TRANSACTION_DATE`) = MONTH(b.`TRANSACTION_DATE`)
    WHERE YEAR(a.`TRANSACTION_DATE`) = 2018
    GROUP BY a.coalesce(date_format(a.`TRANSACTION_DATE`, '%M'), 'Grand Total')
    ORDER BY a.coalesce(date_format(a.`TRANSACTION_DATE`, '%M'), 'Grand Total');
    

    请注意,通过删除 WHERE 子句并将年份添加到 group by 和 order by 子句,您可以生成多年的报告。

    【讨论】:

      猜你喜欢
      • 2020-10-07
      • 1970-01-01
      • 2021-11-01
      • 1970-01-01
      • 2020-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-30
      相关资源
      最近更新 更多