首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >列不存在(在查询中创建列)

列不存在(在查询中创建列)
EN

Stack Overflow用户
提问于 2015-11-15 13:39:04
回答 1查看 1.8K关注 0票数 2

运行此查询时,将在SELECT部分的postgres中获取错误‘列’“error”不存在“。“距离”是指给定坐标的两个点之间的距离。我想这是时间问题吧?函数在发生错误之前被正确创建。

代码语言:javascript
复制
CREATE OR REPLACE FUNCTION pg_temp.earthDistance(lat1 double precision, lng1 double precision, lat2 double precision, lng2 double precision)
  RETURNS double precision AS
$BODY$
SELECT 
  asin(
  sqrt(
    sin(radians($3-$1)/2)^2 +
    sin(radians($4-$2)/2)^2 *
    cos(radians($1)) *
    cos(radians($3))
  )
  ) * 7918 AS distance;
$BODY$
  LANGUAGE sql IMMUTABLE;

SELECT populated_place.name AS populated_place_name, 
  feature.name AS feature_name, 
  ROUND(
    pg_temp.earthDistance(
      populated_place.latitude,
      populated_place.longitude,
      feature.latitude,
      feature.longitude)::NUMERIC,
  2) AS distance,
  RANK() OVER (PARTITION BY populated_place_name ORDER BY distance) AS rank
FROM populated_place JOIN feature ON
  feature.type='summit' AND
  populated_place.population>=100000
WHERE distance<=200
ORDER BY populated_place_name, rank;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-15 13:59:33

不能在distance子句中使用别名( WHERE )。使用派生表:

代码语言:javascript
复制
SELECT 
    *, 
    RANK() OVER (PARTITION BY populated_place_name ORDER BY distance) AS rank
FROM (  
    SELECT 
        populated_place.name AS populated_place_name, 
        feature.name AS feature_name, 
        ROUND(
            pg_temp.earthDistance(
            populated_place.latitude,
            populated_place.longitude,
            feature.latitude,
            feature.longitude)::NUMERIC, 2) AS distance
    FROM populated_place 
    JOIN feature ON
        feature.type='summit' AND
        populated_place.population>=100000
    ) sub
WHERE distance <= 200
ORDER BY populated_place_name, rank;

另见:Using an Alias in a WHERE clause

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33720323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档