sql - 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 中无效?
解决方案
确保您有正确排序的付款数据,但这将删除重复的 payment_id 观察:
从用户中选择 a.user_id, a.payment_id, b.amount
推荐阅读
- python - 计算两个 gamma 分布列表之间的 KL Divergence
- git - 不小心更改了以 git 结尾的行,现在无法更改回来,因为它说没有任何改变
- javascript - Mongoose remove a Schema property after creating virtual property
- python-3.x - 如何根据散景中的值添加注释
- excel - EXCEL VBA 1004 使用 OFFSET 引起的运行时错误
- reactjs - 反应本机中的Android Manifest Map错误
- javascript - 如何从es6模块javascript中导入的文件中获取脚本url?
- react-native - 在 ViroReact 中转换坐标需要帮助
- bash - 如何在 Google Cloud Build 步骤中使用之前从 bash 脚本文件中删除所有 CR (\r) 字符?
- jestjs - 如何重置 dynamodb 本地数据以进行单元测试