mysql在一个查询中使用两个函数

u4vypkhs  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(337)

我尝试在一个查询中使用两个相同的函数,这就是

  1. select *, ST_Distance_Sphere( point(
  2. 31.00000, 35.00000),
  3. point(latitude_0, longitude_0)) * .0001
  4. as `distance_in_km` ,
  5. ST_Distance_Sphere( point (
  6. 31.00000, 35.00000),
  7. point(dest_latitude_0, dest_longitude_0)) * .0001
  8. as `distance_in_km`
  9. from `most_places_used`
  10. having `distance_in_km` <= '0.001'
  11. order by `distance_in_km` asc Limit 1

这只使用第一个函数,只为第一个latlngs提供正确的结果。
我需要一行,它几乎接近2个latlngs(latlngs只是一个例子,不在乎它是否错<3),我想让它给我一行,等于函数,假设是函数latlngs接近4列latlngs
这是列名。。在函数st\u distance\u sphere中

  1. (latitude_0, longitude_0, dest_latitude_0, dest_longitude_0)

我需要类似于这个查询的东西做同样的需要或修复它<3

q9rjltbz

q9rjltbz1#

您为两个不同的列提供了相同的别名,这使得您的查询对于要使用哪个列进行过滤和排序不明确。我推荐两个不同的别名和 least() 取而代之的是:

  1. select *
  2. from (
  3. select
  4. mpu.*,
  5. ST_Distance_Sphere(
  6. point(31.00000, 35.00000),
  7. point(latitude_0, longitude_0)
  8. ) * 0.0001 as distance_in_km1,
  9. ST_Distance_Sphere(
  10. point (31.00000, 35.00000),
  11. point(dest_latitude_0, dest_longitude_0)
  12. ) * 0.0001 as distance_in_km2
  13. from most_places_used mpu
  14. ) t
  15. where least (distance_in_km1, distance_in_km2) <= 0.001
  16. order by least (distance_in_km1, distance_in_km2)
  17. limit 1

注意,我使用了子查询而不是 having 条款:这是一个更标准和可读性的方式进行,没有任何性能罚款无论如何。
如果不需要区分结果集中的两个计算,可以移动 least() 直接到子查询:

  1. select *
  2. from (
  3. select
  4. mpu.*,
  5. least(
  6. ST_Distance_Sphere(
  7. point(31.00000, 35.00000),
  8. point(latitude_0, longitude_0)
  9. ),
  10. ST_Distance_Sphere(
  11. point (31.00000, 35.00000),
  12. point(dest_latitude_0, dest_longitude_0)
  13. )
  14. ) * 0.0001 as distance_in_km
  15. from most_places_used mpu
  16. ) t
  17. where distance_in_km <= 0.001
  18. order by distance_in_km
  19. limit 1
展开查看全部

相关问题