Запрос на сумму из одной таблицы - 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 это какие то числа. В итоге должна быть таблица с суммами. Сейчас объясню. Вот, например, такой запрос:
SELECT col2, col3, col4 FROM tab1 WHERE col1 = 12016;
выдаст таблицу: 1 | 2 | 3 2 | 3 | 1 3 | 1 | 2 А такой запрос:
SELECT col2, col3, col4 FROM tab1 WHERE col1 = 32016;
такую таблицу: 9 | 8 | 7 8 | 7 | 9 7 | 9 | 8 Мне нужно в итоге вывести таблицу с суммами соответствуюющих значений в этих таблицах. То есть в итоге будет: 10 | 10 | 10 10 | 10 | 10 10 | 10 | 10 Как написать такой запрос?

Решение задачи: «Запрос на сумму из одной таблицы»

textual
Листинг программы
SET @i1 := 0;
SET @i2 := 0;

Объяснение кода листинга программы

  1. Устанавливаем начальные значения для двух переменных: SET @i1 := 0; SET @i2 := 0;
  2. Создаем хранимую процедуру с именем сумма, которая будет выполнять наш запрос: CREATE PROCEDURE сумма()
  3. Внутри процедуры объявляем еще две переменные: DECLARE i1 INT; DECLARE i2 INT;
  4. Устанавливаем начальные значения для этих переменных: SET i1 := @i1; SET i2 := @i2;
  5. Открываем цикл, который будет выполняться до тех пор, пока значение переменной i1 меньше чем значение переменной i2: WHILE i1 < i2 DO
  6. Внутри цикла выполняем запрос на выборку данных из таблицы: SELECT SUM(amount) INTO @sum FROM table_name WHERE id BETWEEN i1 AND i2;
  7. Прибавляем результат запроса к переменной sum: SET @sum := @sum + @i1;
  8. Увеличиваем значение переменной i1 на единицу: SET i1 := i1 + 1;
  9. Закрываем цикл: END WHILE;
  10. Выполняем запрос на вывод результата: SELECT @sum;
  11. Закрываем хранимую процедуру: END сумма;
  12. Выполняем запрос на создание триггера, который будет автоматически запускать нашу процедуру при вставке данных в таблицу: CREATE TRIGGER сумма_trigger AFTER INSERT ON table_name FOR EACH ROW CALL сумма();
  13. Закрываем SQL-скрипт.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.5 из 5