Подсчёт итогов для отдельных строк и вывод результата - 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
и общее количество баллов для всех строк с одинаковым именем.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д