Подсчёт итогов для отдельных строк и вывод результата - MySQL
Формулировка задачи:
Есть запрос ответ следующий:
в конечном итоге нужно получить:
Как например перебрать все значения в запросе и добавить к ним UNION?
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 |
-- цикл 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)
Объяснение кода листинга программы
- Сначала выводится список всех строк из таблицы
test
. - Затем, в подзапросе, создается временная таблица
t
, которая содержит те же поля, что и исходная таблицаtest
, а также новое полеx
. - В этом подзапросе используется функция ROW_NUMBER(), которая пронумеровывает строки в каждом разделе, разделённом по значению поля
name
. Значениеx
во временной таблицеt
будет соответствовать номеру строки для каждого уникального значения поляname
. - Затем, во внешнем запросе, используется функция SUM() для подсчета общего количества баллов для каждого уникального значения поля
name
. - Результаты сортируются по полю
x
(номеру строки) и полюpoint
в порядке возрастания. - Выводятся результаты, которые показывают количество баллов для каждого уникального значения поля
name
и общее количество баллов для всех строк с одинаковым именем.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д