Как установить значение переменной на ноль в каждой строке - PullRequest
0 голосов
/ 15 апреля 2020

Данные таблицы_1 в виде текста:

id, col_1, col_2

1,10,6

2,3,21

3, 44,3

4,24,17

5,39,42

Первичный ключ: id

Версия базы данных: 8.0.19

Мне нужна ваша помощь, чтобы установить значение переменной @col равным нулю в каждой строке, чтобы конечный результат был:

id, c1, c2

1,10,16

2,3,24

3,44,47

4,24,41

5,39,81

SET @col := 0;
SELECT id, (@col := @col + col_1) AS c1, (@col := @col + col_2) AS c2 FROM table_1 ORDER BY id;

Большое спасибо.

Ответы [ 2 ]

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

Вы должны добавить столбец с @col: = 0 перед вычислением

Схема (MySQL v8.0)

CREATE TABLE table_1  (
  `id` INTEGER,
  `col_1` INTEGER,
  `col_2` INTEGER
);

INSERT INTO table_1 
  (`id`, `col_1`, `col_2`)
VALUES
  ('1', '10', '6'),
  ('2', '3', '21'),
  ('3', '44', '3'),
  ('4', '24', '17'),
  ('5', '39', '42');

Запрос # 1

SET @col := 0;

Нет результатов для отображения.


Запрос # 2

SELECT id,@col := 0, (@col := @col + col_1) AS c1, (@col := @col + col_2) AS c2 FROM table_1 ORDER BY id;

| id  | @col := 0 | c1  | c2  |
| --- | --------- | --- | --- |
| 1   | 0         | 10  | 16  |
| 2   | 0         | 3   | 24  |
| 3   | 0         | 44  | 47  |
| 4   | 0         | 24  | 41  |
| 5   | 0         | 39  | 81  |

Просмотр на БД Fiddle

Почему мой ответ работает MySQL фактически зацикливается на строке номер 1, а затем начинается с левого столбца в операторе выбора направо.

Чтобы порядок столбцов определял, что находится в пользовательской переменной.

С этой функцией вы можете создавать очень классные алгоритмы.

0 голосов
/ 15 апреля 2020

Не нужно объявлять переменную для достижения результата. Попробуйте следующее:

SELECT id, col_1 AS c1, (col_1+ col_2) AS c2 FROM table_1 ORDER BY id;

вы получите желаемый результат.

In MySql Переменная требуется только тогда, когда необходимо выбрать данные из другого местоположения / строки. Для текущих операций со строками все значения столбцов могут использоваться непосредственно для выполнения любых операций, связанных с этой строкой.

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