Как объединить строки в postgres, если значение столбца совпадает, и суммировать другой столбец на основе объединенных строк? - PullRequest
0 голосов
/ 24 сентября 2019

С учетом структуры таблицы, подобной этой:

id | name | amount | other1 | other2 | other3

и выборочных данных, таких как:

1 | a | 40 | unrelevant data | ...
2 | a | 80 | unrelevant data | ...
3 | b | 30 | unrelevant data | ...
4 | b | 50 | unrelevant data | ...
5 | c | 20 | unrelevant data | ...
6 | c | 30 | unrelevant data | ...

Я хочу, чтобы мой результат выбора складывал строки и суммировал суммы, получаемые таким образом,, Я не забочусь о потерянных данных (строки, которые говорят несущественные данные):

1 | a | 120 | unrelevant data | ...
3 | b | 80  | unrelevant data | ...
5 | c | 50  | unrelevant data | ...

Я пробовал что-то вроде этого:

SELECT id, "name", SUM(amount), other1, other2, other3 FROM test_table
GROUP BY "name"

Я получил ошибку:

column "id" must appear in the GROUP BY clause or be used in an aggregate function

так что я знаю, что что-то упустил.

Ответы [ 2 ]

1 голос
/ 24 сентября 2019

Вы можете использовать max() для id:

SELECT MAX(id), "name", SUM(amount), MAX(other1) . . .
FROM test_table
GROUP BY "name"
0 голосов
/ 24 сентября 2019

Вы можете рассмотреть что-то вроде этого.

SELECT t1.id, t2.name, t1.amount, t2, t2.other1, t2.other2, t2.other3 
FROM (
    SELECT id, SUM(amount) as amount FROM test_table
GROUP BY id) as t1
LEFT JOIN test_table t2 on t2.id = t1.id
...