Postgres列必须出现在GROUP BY子句中或在聚合函数中使用

时间:2019-04-25 18:12:18

标签: sql postgresql group-by

我正在尝试修复查询,以使其与oracle和postgres兼容。但是同一查询在oracle中不起作用,而在postgres中不起作用。示例查询是简化的,没有实际意义,但这是一个很好的示例,用于显示我要解决的问题。

Postgres版本:11.2,oracle版本:12.1.0.2.0

“付款”表具有两列(payment_id,金额);

用户表具有一列(user_id);

查询1:

select p.amount, (select min(p.payment_id) from payments, users where p.payment_id = payments.payment_id) 
from payments p, users;

postgres中的错误: 列“ p.amount”必须出现在GROUP BY子句中或在聚合函数中使用

查询2:

select (select min(p.payment_id) from payments, users where p.payment_id = payments.payment_id) from payments p, users;

postgres中的错误: 子查询使用外部查询中未分组的列“ p.payment_id”

有人知道为什么以上两个查询在oracle中有效,而在postgres中无效吗?

1 个答案:

答案 0 :(得分:0)

确保您已正确订购付款中的数据,但这将删除重复的payment_id观察值:

选择a.user_id,a.payment_id,b.amount 来自用户     内部联接(在(payment_id)payment_id上选择不同,从付款中选择金额)         在a.payment_id = b.payment_id上 ;