在距离计算中使用别名

dlofrodloh

我有2张桌子:候选人和candidate_locationcandidate_location表根据其type字段从其他3个表中的任意一个获取地图坐标其结果是别名latlng这就需要查询的一部分使用以下的IF语句,其中它的作品了距离。

我收到一个错误,它无法在距离计算部分中找到“ lat”或“ lng”列,我想是因为它们是别名。我如何重组它以便它们在计算中被识别?

这是查询:

SELECT candidate.CandID,
    IF (candidate_location.type = 1, p.latitude, IF (candidate_location.type = 2, a.latitude, pr.latitude)) AS lat,
    IF (candidate_location.type = 1, p.longitude, IF (candidate_location.type = 2, a.longitude, pr.longitude)) AS lng,
    IF (candidate_location.type = 2, a.standard_deviation,null) as standard_deviation, 
   ( 3959 * acos( cos( radians(51.41019) ) * cos( radians(lat ) ) 
   * cos( radians(lng) - radians(0.07222)) + sin(radians(51.41019)) 
   * sin( radians(lat)))) AS distance 

    FROM candidate_location

    LEFT JOIN geo_postcodes AS p ON (candidate_location.type = 1 AND candidate_location.postal_id  = p.id) 
    LEFT JOIN geo_area_averages AS a ON (candidate_location.type = 2 AND candidate_location.postal_id  = a.id)
    LEFT JOIN geo_probability AS pr ON (candidate_location.type = 3 AND candidate_location.postal_id  = pr.id) 
LEFT JOIN candidate ON candidate_location.candid=candidate.CandID 
浅褐色的

正如Ashwin所提到的,您不能直接将结果列名称用作计算中的字段。您将需要再次声明它……除非您另外使用MySql变量。它们像内联编程一样工作。设置变量值,然后使用该值,但是您仍然可以保留该值作为相关的列名。

SELECT 
      candidate.CandID,
      @varLat := COALESCE( p.latitude, a.latitude, pr.latitude) AS lat,
      @varLong := COALESCE( p.longitude, a.longitude, pr.longitude) AS lng,
      COALESCE( a.standard_deviation, null) as standard_deviation, 
      ( 3959 * acos( cos( radians(51.41019) ) * cos( radians(@varLat ) ) 
         * cos( radians(@varLat) - radians(0.07222)) + sin(radians(51.41019)) 
         * sin( radians(@varLong)))) AS distance
   FROM 
      ( select @varLat := 0.00, @varLong := 0.00) sqlvars,
      candidate_location CanLoc
         LEFT JOIN geo_postcodes AS p 
            ON (CanLoc.type = 1 AND CanLoc.postal_id  = p.id) 
         LEFT JOIN geo_area_averages AS a 
            ON (CanLoc.type = 2 AND CanLoc.postal_id  = a.id)
         LEFT JOIN geo_probability AS pr 
            ON (CanLoc.type = 3 AND CanLoc.postal_id  = pr.id) 
         LEFT JOIN candidate 
            ON CanLoc.candid=candidate.CandID 

另外,我使用的是COALESCE()而不是嵌套的IF()块。返回第一个非空值,因此,由于您的联接基于类型1、2或3,因此只有该行才具有限定值。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在计算字段中使用字段别名

来自分类Dev

使用数组在vb中使用经度和纬度计算距离

来自分类Dev

在功能中使用别名?

来自分类Dev

使用SparkR计算地理距离

来自分类Dev

无法正确使用Haversine公式在R中使用纬度和经度计算距离

来自分类Dev

如何在R中使用lat和long遍历列并计算距离

来自分类Dev

如何在熊猫数据框中使用纬度和经度计算距离?

来自分类Dev

在R中使用dplyr计算并汇总表中的总距离

来自分类Dev

Bash:在变量中使用别名

来自分类Dev

在SQL请求中使用别名

来自分类Dev

在别名中使用参数变量

来自分类Dev

在if语句中使用别名

来自分类Dev

Bash:在变量中使用别名

来自分类Dev

在SQL请求中使用别名

来自分类Dev

在别名中使用dir var?

来自分类Dev

在zsh别名中使用Heredoc

来自分类Dev

在OR子句SQL中使用别名

来自分类Dev

使用距离公式计算两点之间的距离

来自分类Dev

使用密码计算距离(谷歌地图距离矩阵 API)

来自分类Dev

仅使用NumPy计算马氏距离

来自分类Dev

如何使用经度和纬度计算距离?

来自分类Dev

使用TensorFlow进行成对距离计算

来自分类Dev

使用坐标计算与首都的距离[R]

来自分类Dev

在Python中计算和使用欧几里得距离

来自分类Dev

使用numpy加快顶点距离计算的方法

来自分类Dev

如何使用Wifi信号计算用户距离?

来自分类Dev

使用PostgreSQL查询计算行进距离

来自分类Dev

使用动态规划计算矩阵距离

来自分类Dev

使用 postgis 计算旅行距离