Группа PostgreSQL по всем полям - PullRequest
0 голосов
/ 30 мая 2018

У меня такой запрос:

SELECT
table1.*,
sum(table2.amount) as totalamount
FROM table1
join table2 on table1.key = table2.key
GROUP BY table1.*;

Я получил ошибку: столбец "table1.key" должен появиться в предложении GROUP BY или использоваться в статистической функции.
Есть лилюбой способ сгруппировать все поля?

Ответы [ 3 ]

0 голосов
/ 30 мая 2018

Вы должны указать все имена столбцов в group by, которые выбраны и не являются частью агрегатной функции (SUM/COUNT и т. Д.)

select c1,c2,c4,sum(c3) FROM  totalamount
group by c1,c2,c4;

Ярлык, чтобы избежать записи столбцов снова в group by будет указывать их в виде чисел.

select c1,c2,c4,sum(c3) FROM  t
group by 1,2,3;
0 голосов
/ 30 мая 2018

Я нашел другой способ решения, не идеальный, но, возможно, он полезен:

SELECT string_agg(column_name::character varying, ',') as columns
FROM information_schema.columns
WHERE table_schema = 'your_schema'
AND table_name   = 'your_table

Затем примените этот результат выбора к основному запросу следующим образом:

$columns = $result[0]["columns"];

SELECT
table1.*,
sum(table2.amount) as totalamount
FROM table1
join table2 on table1.key = table2.key
GROUP BY $columns;
0 голосов
/ 30 мая 2018

Нет синтаксиса ярлыков для группировки по всем столбцам, но в описанном случае это, вероятно, не требуется. Если столбец key является первичным ключом, достаточно, когда вы его используете:

GROUP BY table1.key;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...