mysql - 通过月份计算显示一月的所有内容?!? (MySql 工作台 6.3 CE)

标签 mysql

我有一个脚本可以计算相对于前几个月总数的增减百分比。例如。 Jan 的百分比将为 0,那么无论 Feb 的总数是多少,都会根据 Jan 的百分比等计算出百分比。

我已经在 sqlfiddle ( http://sqlfiddle.com/#!9/8c2eac/2/0 ) 中创建了表

结果每个月都显示为一月,我想以正确的顺序查看一月、二月、三月等,以便百分比计算也能正确计算。有任何想法吗?

http://sqlfiddle.com/#!9/8c2eac/2/0

SELECT monthname(concat('1970-', lpad('1', A.MONTH, '0'), '-01')) AS MONTH,
       A.SALES_AMOUNT,
       CASE
         WHEN A.SALES_AMOUNT IS NULL
           THEN NULL
         WHEN B.SALES_AMOUNT IS NULL
           THEN NULL
         WHEN A.SALES_AMOUNT = 0
           THEN NULL
         ELSE
           ROUND((B.SALES_AMOUNT / A.SALES_AMOUNT - 1) * 100,2)
       END AS PERCENTAGE
       FROM (SELECT month(TRANSACTION_DATE) AS MONTH,
                    ROUND(sum(SALES_AMOUNT),2) AS SALES_AMOUNT
                    FROM SALES
                    WHERE year(TRANSACTION_DATE) = 2018
                    GROUP BY MONTH) A
            LEFT JOIN (SELECT month(TRANSACTION_DATE) AS MONTH,
                              ROUND(sum(SALES_AMOUNT),2) AS SALES_AMOUNT
                              FROM SALES
                              WHERE year(TRANSACTION_DATE) = 2018
                              GROUP BY MONTH) B
                      ON A.MONTH - 1 = B.MONTH
       ORDER BY A.MONTH;

结果:

January 45163.22    
January 34531.15    30.79
January 44194.98    -21.87
January 30826.68    43.37
January 39016.04    -20.99
January 37284.25    4.64
January 37640.08    -0.95
January 39703.85    -5.20
January 34958.94    13.57
January 34447.61    1.48
January 39161.90    -12.04
January 36986.16    5.88

最佳答案

看起来很像我给出的答案here .我在那里犯了一个错误,我以为我已经编辑掉了——它是快速测试的遗留物。事实证明,我没有,为此感到抱歉。

monthname(concat('1970-', lpad('1', A.MONTH, '0'), '-01')) 替换为 monthname(concat(' 1970-', lpad(A.MONTH, 2, '0'), '-01')).

(如果您使用它们,也许可以考虑接受我的答案。)


编辑:

交换AB的角色:

SELECT monthname(concat('1970-', lpad(A.MONTH, 2, '0'), '-01')) AS MONTH,
       A.SALES_AMOUNT,
       CASE
         WHEN A.SALES_AMOUNT IS NULL
           THEN NULL
         WHEN B.SALES_AMOUNT IS NULL
           THEN NULL
         WHEN B.SALES_AMOUNT = 0
           THEN NULL
         ELSE
           ROUND((A.SALES_AMOUNT / B.SALES_AMOUNT - 1) * 100,2)
       END AS PERCENTAGE
       FROM (SELECT month(TRANSACTION_DATE) AS MONTH,
                    ROUND(sum(SALES_AMOUNT),2) AS SALES_AMOUNT
                    FROM SALES
                    WHERE year(TRANSACTION_DATE) = 2018
                    GROUP BY MONTH) A
            LEFT JOIN (SELECT month(TRANSACTION_DATE) AS MONTH,
                              ROUND(sum(SALES_AMOUNT),2) AS SALES_AMOUNT
                              FROM SALES
                              WHERE year(TRANSACTION_DATE) = 2018
                              GROUP BY MONTH) B
                      ON A.MONTH - 1 = B.MONTH
       ORDER BY A.MONTH;

关于mysql - 通过月份计算显示一月的所有内容?!? (MySql 工作台 6.3 CE),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49981029/

相关文章:

php - MySQL 停止执行一个简单的查询

使用 2 个数据库表的 php 登录

mysql - SQL 引用完整性触发器

mysql - 用于 mysql 复制的端口转发(在 docker 内)

mysql - 如何将 MySQL 数据库转换为旧版本?

mysql - mod_mono 和 MySQl

mysql - 从 SQL 导入 RavenDB Northwind - 为什么没有给 employee_privileges 一个集合?

MySql,在带有正则表达式的段落中查找

java - 带有选择死锁的嵌套更新

mysql - SUM 列和 GROUP BY 日期 MySQL (MariaDB)