我有这样的查询:
SELECT
table1.*,
sum(table2.amount) as totalamount
FROM table1
join table2 on table1.key = table2.key
GROUP BY table1.*;
Run Code Online (Sandbox Code Playgroud)
我收到错误消息:“ table1.key”列必须出现在GROUP BY子句中或在聚合函数中使用。
有什么办法可以将“所有”字段分组?
您必须指定group by 所选的所有列名,并且不属于聚合函数(SUM/COUNT等)
select c1,c2,c4,sum(c3) FROM totalamount
group by c1,c2,c4;
Run Code Online (Sandbox Code Playgroud)
避免再次写入列的快捷方式group by是将它们指定为数字。
select c1,c2,c4,sum(c3) FROM t
group by 1,2,3;
Run Code Online (Sandbox Code Playgroud)
没有用于按所有列分组的快捷方式语法,但是在描述的情况下可能没有必要。如果该key列是主键,则在使用时就足够了:
GROUP BY table1.key;
Run Code Online (Sandbox Code Playgroud)
我找到了另一种解决方法,虽然不完美,但也许有用:
SELECT string_agg(column_name::character varying, ',') as columns
FROM information_schema.columns
WHERE table_schema = 'your_schema'
AND table_name = 'your_table
Run Code Online (Sandbox Code Playgroud)
然后将此选择结果应用于主查询,如下所示:
$columns = $result[0]["columns"];
SELECT
table1.*,
sum(table2.amount) as totalamount
FROM table1
join table2 on table1.key = table2.key
GROUP BY $columns;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4445 次 |
| 最近记录: |