sql - 如何将此 mysql 查询转换为 postgres 9.4

标签 sql postgresql greatest-n-per-group postgresql-9.4

首先,我在两个数据库(MySQL 和 Postgres)中有相同的表名、列和数据,我在 MySQL 5.6.24 中使用的查询可以正常工作

select *,abs(longitudes - -81.4563009)+abs(latitudes-28.11657) as LowestNum 
from zips group by LowestNum limit 1

当我将相同的查询放入 postgres 9.4 时,我基本上是在给定纬度和经度的情况下尝试获取最近的位置,我收到一个错误,指出

ERROR: column "zips.zip" must appear in the GROUP BY clause or be used in an aggregate function
SQL state: 42803
Character: 8

然后我改变周围的事情并这样做

select *, abs(longitudes - -81.3952524)+abs(latitudes-28.4583868) as   
LowestNum from zips group by LowestNum,zips.zip limit 1

我得到了这个错误

ERROR: column "zips.ziptype" must appear in the GROUP BY clause or be used in an aggregate function
SQL state: 42803
Character: 8

我是 postgres 的新手,但一直在查看文档并四处搜索,但没有任何建议。

最佳答案

这个怎么样:

select *, abs(longitudes - -81.4563009)+abs(latitudes-28.11657) as LowestNum 
from zips 
order by LowestNum ascending 
limit 1

抱歉,我没有 PostgreSQL 实例来测试它。

order by [..] ascending/descending limit 1 是避免 minmax 及其带来的困难的常用方法当您有多个结果列时(分组依据,连接)。

关于sql - 如何将此 mysql 查询转换为 postgres 9.4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31504641/

相关文章:

sql - Oracle Get Records where String not present as Sub string in other rows?

java - 完全支持 PostgreSQL 数据类型的 JPA 实现?

postgresql - 将字段名称用单引号括起来的 json 字符串作为 jsonb 字段插入到 postgresql 中

postgresql - 在 PostgreSQL 中查找以秒为单位的时间戳之间的差异

MYSQL GROUP BY 和 WHERE 子句

sql - 获取每组名称的最高值

php - 如何根据mysql中的一列获取唯一记录

MySQL 搜索与用户输入的搜索字符串相匹配的文章

mysql - 这个模式和 DBIC 代码是否有效?

sql - 日期之间一天中的小时数