MySQL Рассчитать процентную разницу (не изменить) между 2 столбцами на основе псевдонима столбца SUM. - PullRequest
2 голосов
/ 23 марта 2019

У меня есть 2 таблицы t1, где хранятся цена и тип позиции со значением ENUM, и t2, где хранится проданное количество. У меня есть запрос для расчета общей продажи (цена * кол-во), но мне нужно рассчитать разницу между 2 приведенными числами.

Формула расчета для разности между двумя числами должна быть:

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

Используя приведенную выше формулу, мне нужно рассчитать разницу в процентах между N1 и N2. Оба числа являются результатом 2 отдельных случаев SUM на основе 2 значений ENUM в col_type (см. Ниже)

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 (уже сгенерированные) в 3-й столбец и рассчитать разницу между N1 и N2 по приведенной выше формуле?

Примечание: обратите внимание, что процентная разница между 2 числами, а не процентное изменение где (N2-N1) / N1 * 100 применяется ...

Заранее спасибо за любой ответ ...

1 Ответ

1 голос
/ 23 марта 2019

У вас странное определение «разницы».Для этого используйте подзапрос:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...