Sql Postgres地理定位点距离

Sql Postgres地理定位点距离,sql,postgresql,Sql,Postgresql,我正试图做一个查询来确定Postgres数据库中地理位置点之间的距离这是我的查询 SELECT latitude, longitude, SQRT( POW(69.1 * (latitude - 31.8679), 2) + POW(69.1 * (-116.6567 - longitude) * COS(latitude / 57.3), 2)) AS distance FROM locations HAVING distance < 25 ORDER BY distance 但它

我正试图做一个查询来确定Postgres数据库中地理位置点之间的距离这是我的查询

SELECT latitude, longitude, SQRT(
POW(69.1 * (latitude - 31.8679), 2) +
POW(69.1 * (-116.6567 - longitude) * COS(latitude / 57.3), 2)) AS distance
FROM locations 
HAVING distance < 25 
ORDER BY distance
但它给了我这个错误

错误:列距离不存在 第5行:距离小于25


如果我移除距离<25的零件,则查询运行OK

OK,我解决它并检查其他问题

SELECT t.* FROM (
SELECT latitude, longitude,SQRT(POW(69.1 * (latitude - 31.8679), 2) +
POW(69.1 * (-116.6567 - longitude) * COS(latitude / 57.3), 2)) AS distance 
FROM Locations) t
WHERE distance < 1
ORDER BY distance 
具有筛选器分组依据和聚合函数,而其中筛选行。WHERE发生在SELECT之前,因此在WHERE子句中距离列不可用于过滤

查询1可能已经编写好了

SELECT latitude, longitude, SQRT(
POW(69.1 * (latitude - 31.8679), 2) +
POW(69.1 * (-116.6567 - longitude) * COS(latitude / 57.3), 2)) AS distance
FROM locations 
WHERE SQRT(
POW(69.1 * (latitude - 31.8679), 2) +
POW(69.1 * (-116.6567 - longitude) * COS(latitude / 57.3), 2)) < 25 
ORDER BY distance
使用子查询,内部查询在外部查询之前构建,因此t.distance可用于外部查询