mysql выберите из 2 таблиц как (table1.value / table2.value) - PullRequest
2 голосов
/ 25 апреля 2020

У меня есть 2 таблицы с одинаковыми именами столбцов, и мне нужно рассчитать процентное изменение увеличения / уменьшения значений с Y2017 на Y2018.

Y2018 and Y2017 table are similar (I post only some column name to be short):
+--------------------------+---------------+------+-----+---------+-------+
| Field                    | Type          | Null | Key | Default | Extra |
+--------------------------+---------------+------+-----+---------+-------+
| id_azione                | varchar(8)    | NO   | PRI | NULL    |       |
| data                     | date          | YES  |     | NULL    |       |
| total_revenue            | decimal(10,2) | YES  |     | NULL    |       |
| cost_of_revenue          | decimal(10,2) | YES  |     | NULL    |       |
| gross_profit             | decimal(10,2) | YES  |     | NULL    |       |
| general_expenses         | decimal(10,2) | YES  |     | NULL    |       |
+--------------------------+---------------+------+-----+---------+-------+

Для десятичных значений мне нужно извлечь " diff "colum с увеличением / уменьшением процентного изменения значений с Y2017 на Y2018.

Выбор работает, если я выбираю только один столбец:

select Y2018.total_revenue, Y2017.total_revenue, ((Y2018.total_revenue/Y2017.total_revenue*100)-100) as diff   
from Y2018, Y2017  
where Y2018.id_azione = Y2017.id_azione;


| total_revenue | total_revenue | diff     |

|       2930.30 |       2749.80 | 6.564114 |

1 row in set (0.01 sec)

Нужно ли делать отдельный выбор для каждый "diff", который я хочу вычислить, или есть способ сделать это только одним выбором?

Спасибо

Carlo

1 Ответ

1 голос
/ 25 апреля 2020

Выбор работает, если я выбираю только один столбец ...

Это верно. Вы не можете разделить * на *. Вам нужно будет назвать каждый из столбцов там. Это может быть утомительно, но это правильный способ сделать это, согласно SQL Стандарту.

Например:

select
  b.*,
  a.*,
  100.0 * b.total_revenue    / a.total_revenue    - 100 as rev_diff,
  100.0 * b.cost_of_revenue  / a.cost_of_revenue  - 100 as cost_diff,
  100.0 * b.gross_profit     / a.gross_profit     - 100 as profit_diff,
  100.0 * b.general_expenses / a.general_expenses - 100 as exp_diff
from Y2018 b
join Y2017 a on b.id_azione = a.id_azione

Также обратите внимание, что я перефразировал каждую формулу, поместив 100.0 в начале. Это обеспечивает вычисления с плавающей запятой, которые позволяют избежать бесшумных округлений целых чисел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...