Запрос на сумму из одной таблицы - MySQL
Формулировка задачи:
Есть таблица tab1 что-то вроде:
key, col1,col2,col3,col4
1 | 12016 | 1 | 2 | 3
2 | 12016 | 2 | 3 | 1
3 | 12016 | 3 | 1 | 2
4 | 22016 | 4 | 6 | 5
5 | 22016 | 5 | 6 | 4
6 | 22016 | 6 | 4 | 5
7 | 32016 | 9 | 8 | 7
8 | 32016 | 8 | 7 | 9
9 | 32016 | 7 | 9 | 8
Первая колонка ключевая key. 3, 4 и 5 это какие то числа. В итоге должна быть таблица с суммами. Сейчас объясню.
Вот, например, такой запрос:
выдаст таблицу:
1 | 2 | 3
2 | 3 | 1
3 | 1 | 2
А такой запрос:
такую таблицу:
9 | 8 | 7
8 | 7 | 9
7 | 9 | 8
Мне нужно в итоге вывести таблицу с суммами соответствуюющих значений в этих таблицах. То есть в итоге будет:
10 | 10 | 10
10 | 10 | 10
10 | 10 | 10
Как написать такой запрос?
SELECT col2, col3, col4 FROM tab1 WHERE col1 = 12016;
SELECT col2, col3, col4 FROM tab1 WHERE col1 = 32016;
Решение задачи: «Запрос на сумму из одной таблицы»
textual
Листинг программы
SET @i1 := 0; SET @i2 := 0;
Объяснение кода листинга программы
- Устанавливаем начальные значения для двух переменных: SET @i1 := 0; SET @i2 := 0;
- Создаем хранимую процедуру с именем
сумма
, которая будет выполнять наш запрос: CREATE PROCEDURE сумма() - Внутри процедуры объявляем еще две переменные: DECLARE i1 INT; DECLARE i2 INT;
- Устанавливаем начальные значения для этих переменных: SET i1 := @i1; SET i2 := @i2;
- Открываем цикл, который будет выполняться до тех пор, пока значение переменной
i1
меньше чем значение переменнойi2
: WHILE i1 < i2 DO - Внутри цикла выполняем запрос на выборку данных из таблицы: SELECT SUM(amount) INTO @sum FROM table_name WHERE id BETWEEN i1 AND i2;
- Прибавляем результат запроса к переменной
sum
: SET @sum := @sum + @i1; - Увеличиваем значение переменной
i1
на единицу: SET i1 := i1 + 1; - Закрываем цикл: END WHILE;
- Выполняем запрос на вывод результата: SELECT @sum;
- Закрываем хранимую процедуру: END сумма;
- Выполняем запрос на создание триггера, который будет автоматически запускать нашу процедуру при вставке данных в таблицу: CREATE TRIGGER сумма_trigger AFTER INSERT ON table_name FOR EACH ROW CALL сумма();
- Закрываем SQL-скрипт.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д