Postgresql having子句中的列在条令和pgadmin中不存在问题
我正在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
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相同的图片