Подсчёт итогов для отдельных строк и вывод результата - MySQL

Узнай цену своей работы

Формулировка задачи:

Есть запрос
SELECT * FROM user
ответ следующий:
name point
ivanov 5
ivanov 2
petrov 3
sidorov 1
в конечном итоге нужно получить:
name point
ivanov 5
ivanov 2
itogo 7
petrov 3
itogo 3
sidorov 1
itogo 1
Как например перебрать все значения в запросе и добавить к ним UNION?
-- цикл
SELECT * FROM user WHERE name='ivanov'
UNION ALL SELECT 'itogo', SUM(point) s FROM (SELECT * FROM user WHERE name='ivanov') e
-- конец цикла

Решение задачи: «Подсчёт итогов для отдельных строк и вывод результата»

textual
Листинг программы
MariaDB [test]> select * from test;
+------+-------+
| name | point |
+------+-------+
| ivan |     5 |
| ivan |     2 |
| petr |     3 |
| sidr |     1 |
+------+-------+
4 rows in set (0.00 sec)
 
MariaDB [test]> select name, `point` from (
    -> select name x, name, `point` from test
    -> union all
    -> SELECT name, 'itogo', sum(`point`) `point` FROM test group by 1) t
    -> order by x,`point`;
+-------+-------+
| name  | point |
+-------+-------+
| ivan  |     2 |
| ivan  |     5 |
| itogo |     7 |
| itogo |     3 |
| petr  |     3 |
| sidr  |     1 |
| itogo |     1 |
+-------+-------+
7 rows in set (0.01 sec)

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

  1. Сначала выводится список всех строк из таблицы test.
  2. Затем, в подзапросе, создается временная таблица t, которая содержит те же поля, что и исходная таблица test, а также новое поле x.
  3. В этом подзапросе используется функция ROW_NUMBER(), которая пронумеровывает строки в каждом разделе, разделённом по значению поля name. Значение x во временной таблице t будет соответствовать номеру строки для каждого уникального значения поля name.
  4. Затем, во внешнем запросе, используется функция SUM() для подсчета общего количества баллов для каждого уникального значения поля name.
  5. Результаты сортируются по полю x (номеру строки) и полю point в порядке возрастания.
  6. Выводятся результаты, которые показывают количество баллов для каждого уникального значения поля name и общее количество баллов для всех строк с одинаковым именем.

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


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

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

12   голосов , оценка 4.083 из 5
Похожие ответы