首页 > 解决方案 > Postgres 列必须出现在 GROUP BY 子句中或在聚合函数中使用

问题描述

我正在尝试修复查询以使其同时兼容 oracle 和 postgres。但是相同的查询在 oracle 中有效,而在 postgres 中无效。示例查询很简单,没有真正的意义,但它是一个很好的例子来展示我正在尝试解决的问题。

Postgres 版本:11.2,oracle 版本:12.1.0.2.0

Payments 表有两列(payment_id、amount);

用户表有一列(user_id);

查询一:

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 中无效?

标签: sqlpostgresqlgroup-by

解决方案


确保您有正确排序的付款数据,但这将删除重复的 payment_id 观察:

从用户中选择 a.user_id, a.payment_id, b.amount


推荐阅读