Как добавить столбец процентного изменения (не процентных точек) в MySQL?
есть таблица с колонкой изменения процентов:
+---------+
| percent |
+---------+
| -0.50 |
| 0.50 |
| 1.00 |
| -0.20 |
| 0.50 |
| -1.00 |
| -2.00 |
| 0.75 |
| 1.00 |
| 0.50 |
+---------+
Как написать запрос, который вычисляет общее процентное изменение значения для каждой строки, чтобы вычисляемая строка отражала его процентное изменение и все предыдущие строки процентного изменения ?.
ожидаемый результат:
+---------+---------------+---------------+
| percent | nominal_value | total_percent |
+---------+---------------+---------------+
| -0.50 | 0.50 | -0.50 |
| 0.50 | 0.75 | -0.25 |
| 1.00 | 1.50 | 0.50 |
| -0.20 | 1.20 | 0.20 |
| 0.50 | 1.80 | 0.80 |
| -1.00 | 0.00 | -1.00 |
| -2.00 | -2.00 | -3.00 |
| 0.75 | -0.50 | -1.50 |
| 1.00 | 0.00 | -1.00 |
| 0.50 | 0.50 | -0.50 |
+---------+---------------+---------------+
Где nominal_value
- произвольное значение, которое было изменено на percent
, поэтому для первой строки, если номинальное значение было 1.0 (100%), но было изменено на -0.50
(-50%
), это привело к номинальному значению 0.5
.
Затем во второй строке percent
изменение было +0.50
(+50%
), поэтому номинальное значение было увеличено наполовину 0.5 => 0.75
, но можно также сказать, что оно было просто понижено на -0.25
(-25%
) от исходного значения, поскольку с 1.0
до 0.75
это -0.25
(-25%
) из 1.0
.
Это именно то, что я сделал после изменения total_percent
, nominal_value
был использован только для пояснительных целей и не нужен.
Я использую MySQL 8, поэтому запрос может использовать оконные функции / диапазоны и т. Д.
вот тестовая таблица для репликации:
CREATE TABLE IF NOT EXISTS test
(
percent DECIMAL(5,2) NOT NULL
)
ENGINE = InnoDB
;
INSERT INTO test (percent) VALUES
(-0.50)
,(0.50)
,(1.00)
,(-0.20)
,(0.50)
,(-1.0)
,(-2.0)
,(0.75)
,(1.0)
,(0.50)
;
nominal_value
равно 0,5. Однако в первом случаеtotal_percent
равно -0,5, а в последнем случае +0,5. Как это может быть? - person Nick   schedule 22.03.2019test
без столбцаid
и даже удалилORDER BY id
и все равно получил тот же результат. Вы имели в виду производительность или в случае неиспользованияPRIMARY KEY
возникает другая проблема? - person Jimmix   schedule 23.03.2019