【问题标题】:MySQL Calculate percentage difference (not change) between 2 columns based on SUM column aliasMySQL根据SUM列别名计算2列之间的百分比差异(不改变)
【发布时间】:2019-08-14 06:32:04
【问题描述】:

我有 2 个表 t1 存储价格和项目类型的 ENUM 值和存储已售数量的 t2。我有一个查询来计算总销售额(价格 * 数量),但我需要计算 2 个结果数字之间的差异。

两个数之差的计算公式应该是:

((N1 - N2) / ((N1 + N2) / 2)) * 100

使用上面的公式,我需要计算 N1 和 N2 之间的百分比差异。 这两个数字都是基于 col_type 中的 2 个 ENUM 值的 2 个单独的 SUM 案例的结果(请参见下文)

SELECT
  CONCAT('£ ',SUM(CASE WHEN t1.col_type = 'N1' THEN t2.qty * t1.price ELSE 0 END)) AS 'Total N1',
  CONCAT('£ ',SUM(CASE WHEN t1.col_type = 'N2' THEN t2.qty * t1.price ELSE 0 END)) AS 'Total N2'            
FROM t2
  INNER JOIN t1
    ON t2.col_id = t1.col_id

结果输出应该是这样的:

+----------+----------+------------------------+
| Total N1 | Total N2 | Diff between N1 and N2 |
+----------+----------+------------------------+
|  3765.50 |  3246.15 | 14.81%                 |
+----------+----------+-----------------------

我的问题是如何将 N1 和 N2 的值(已经生成)传递到第三列并使用上述公式计算 N1 和 N2 之间的差异?

注意:请注意,这是 2 个数字之间的 百分比差异,而不是 百分比变化,其中 (N2 -N1) / N1 * 100 适用...

提前感谢您的任何回复...

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    你对“差异”的定义很奇怪。为此,请使用子查询:

    SELECT CONCAT('£ ', n1) AS Total_N1,
           CONCAT('£ ', n2) AS Total_N2,
           100 * (N1 - N2) / (N1+N2) / 2 as diff 
    FROM (SELECT SUM(CASE WHEN t1.col_type = 'N1' THEN t2.qty * t1.price ELSE 0 END) as n1,
                 SUM(CASE WHEN t1.col_type = 'N2' THEN t2.qty * t1.price ELSE 0 END) as n2
          FROM t2 INNER JOIN
               t1
               ON t2.col_id = t1.col_id
          ) t
    

    【讨论】:

    • 非常感谢,我的不好没有表达正确的公式。但是,您的建议在计算上略有变化。如 ((N1 - N2) / ((N1 + N2) / 2)) * 100 AS 差异
    • @Lolek 。 . .我更喜欢括号。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-08
    • 1970-01-01
    • 2015-03-25
    • 1970-01-01
    相关资源
    最近更新 更多