我目前正在处理一个查询,该查询应该返回一个按照邻近给定点排序的CartoDB表(即新表)的子集。我想,通过使用PostgreSQL的ROW_NUMBER()方法,在新的一列显示对应到最近在地图上的标签,第二最接近等,想捕捉:PostgreSQL“列不存在”错误CartoDB
SELECT
*,
ST_Distance(
ST_GeomFromText('Point(-73.95623080000001 40.6738101)', 4326)::geography,
the_geom::geography
)/1609 AS dist,
row_number() OVER (ORDER BY dist) as rownum
FROM locations
WHERE ST_Intersects(
ST_GeomFromText(
'Point(-73.95623080000001 40.6738101)', 4326
),
the_geom
)
ORDER BY dist ASC
然而,当我尝试这一点, CartoDB/PostgreSQL返回以下错误:
Error: column "dist" does not exist
任何关于更好的方法或我失踪的建议?
有趣的 - 如果主查询是长期和复杂的,有没有更好的“设计”的策略比一切步入一个子查询?具体来说,如果有其他数据被查询(如上例中的*),那么如何在子查询之外访问? – romeboards
我只是简化问题来解决问题。但是,是的,你必须用'*'创建一个子查询,并且计算出的字段 –
即使是'非计算字段'也不能这样使用。 – user2864740