Как применить операцию SUM без группировки результатов в SQL?
У меня есть таблица, подобная этой:
+----+---------+----------+
| id | group | value |
+----+---------+----------+
| 1 | GROUP A | 0.641028 |
| 2 | GROUP B | 0.946927 |
| 3 | GROUP A | 0.811552 |
| 4 | GROUP C | 0.216978 |
| 5 | GROUP A | 0.650232 |
+----+---------+----------+
Если я выполнил следующий запрос:
SELECT `id`, SUM(`value`) AS `sum` FROM `test` GROUP BY `group`;
I, очевидно, получаем:
+----+-------------------+
| id | sum |
+----+-------------------+
| 1 | 2.10281205177307 |
| 2 | 0.946927309036255 |
| 4 | 0.216977506875992 |
+----+-------------------+
Но мне нужна таблица, подобная этой:
+----+-------------------+
| id | sum |
+----+-------------------+
| 1 | 2.10281205177307 |
| 2 | 0.946927309036255 |
| 3 | 2.10281205177307 |
| 4 | 0.216977506875992 |
| 5 | 2.10281205177307 |
+----+-------------------+
Если суммарные строки явно повторяются.
Есть ли способ получить этот результат без использования нескольких (вложенных) запросов?
Ответы
Ответ 1
ИТ будет зависеть от вашего SQL-сервера, в Postgres/Oracle я бы использовал функции Window. В MySQL... невозможно afaik.
Возможно, вы можете подделать это так:
SELECT a.id, SUM(b.value) AS `sum`
FROM test AS a
JOIN test AS b ON a.`group` = b.`group`
GROUP BY a.id, b.`group`;
Ответ 2
Нет, нет AFAIK. Вам нужно будет использовать соединение, например
SELECT t.`id`, tsum.sum AS `sum`
FROM `test` as t GROUP BY `group`
JOIN (SELECT `id`, SUM(`value`) AS `sum` FROM `test` GROUP BY `group`) AS tsum
ON tsum.id = t.id