Postgresql having子句中的列在条令和pgadmin中不存在问题

Postgresql having子句中的列在条令和pgadmin中不存在问题,postgresql,doctrine-orm,pgadmin,Postgresql,Doctrine Orm,Pgadmin,我正在pgadmin中运行查询,但“面临问题”列距离不存在 select f.title, f.longitude, f.latitude, (3959 * cos(cos(radians('52.512452')) * cos(radians(latitude)) * cos(radians(longitude) - radians('13.390931')) + sin(radians('52.512452')) * sin(radians(latitude)))) AS distance

我正在pgadmin中运行查询,但“面临问题”列距离不存在

select f.title, f.longitude, f.latitude, (3959 * cos(cos(radians('52.512452')) * cos(radians(latitude)) * cos(radians(longitude) - radians('13.390931')) + sin(radians('52.512452')) * sin(radians(latitude)))) AS distance from fitness_studio f having distance<1 order by distance desc
提前感谢您的帮助

问候,


据我所知,postgresql无法在where子句中直接使用别名列。因此,您应该尝试复制逻辑:

SELECT
  f.title,
  f.longitude,
  f.latitude,
  (3959 * cos(cos(radians('52.512452')) * cos(radians(latitude)) * cos(radians(longitude) 
- radians('13.390931')) + sin(radians('52.512452')) * sin(radians(latitude)))) AS distance
  FROM fitness_studio f
 WHERE (3959 * cos(cos(radians('52.512452')) * cos(radians(latitude)) *
        cos(radians(longitude) - radians('13.390931')) + 
        sin(radians('52.512452')) * sin(radians(latitude)))) < 1
 ORDER BY distance DESC
要使用子查询,请执行以下操作:

WITH container AS (
SELECT
  f.title,
  f.longitude,
  f.latitude,
  (3959 * cos(cos(radians('52.512452')) * cos(radians(latitude)) *
   cos(radians(longitude) - radians('13.390931')) +
   sin(radians('52.512452')) * sin(radians(latitude)))) AS distance
FROM fitness_studio f)
SELECT *
  FROM container
 WHERE distance < 1
 ORDER BY distance DESC
请记住,使用这样的子查询可能会对执行计划产生负面影响,当您的表足够大时,执行速度比查询笨拙更重要

注意,ORDER BY可以正确地获取别名作为参数。假设这是因为ORDER BY不影响选定的行,它只是旋转它们。与GROUP BY相同的图片