Как применить операцию СУММЫ, не группируя результаты в 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`;

Я, очевидно, добираюсь:

+----+-------------------+
| 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 | 
+----+-------------------+

Где суммированные строки явно повторяются.

Существует ли способ получить этот результат, не используя несколько (вложенных) запросов?

13
задан Luca 4 March 2010 в 17:10
поделиться

2 ответа

ИТ будет зависеть от вашего SQL-сервера, в Postgres / Oracle я бы использовал оконные функции. В 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`;
10
ответ дан 2 December 2019 в 01:10
поделиться

Нет, 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
1
ответ дан 2 December 2019 в 01:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: