Sql Postgres地理定位点距离
我正试图做一个查询来确定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 但它
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的零件,则查询运行OKOK,我解决它并检查其他问题
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可用于外部查询