Mysql 在 1 个查询中使用 2 个函数
Mysql use 2 functions in 1 query
我正在尝试在 1 个查询中使用 2 个相同的函数
select *, ST_Distance_Sphere( point(
31.00000, 35.00000),
point(latitude_0, longitude_0)) * .0001
as `distance_in_km` ,
ST_Distance_Sphere( point (
31.00000, 35.00000),
point(dest_latitude_0, dest_longitude_0)) * .0001
as `distance_in_km`
from `most_places_used`
having `distance_in_km` <= '0.001'
order by `distance_in_km` asc Limit 1
这只使用第一个函数,并且只为第一个 latlngs 给出正确的结果。
我需要几乎接近 2 个 latlngs 的行(latlngs 只是示例,不要在意它是否错误 <3)我想要它给我等于函数的行假设是函数4 列 latlngs
附近的 latlngs
这是列名..如函数 ST_Distance_Sphere
(latitude_0, longitude_0, dest_latitude_0, dest_longitude_0)
我需要与此查询类似的东西做同样的需要或修复它 <3
您为两个不同的列提供了相同的别名,这使得您的查询对于要使用哪一个列进行过滤和排序变得不明确。我会推荐两个不同的别名和 least()
代替:
select *
from (
select
mpu.*,
ST_Distance_Sphere(
point(31.00000, 35.00000),
point(latitude_0, longitude_0)
) * 0.0001 as distance_in_km1,
ST_Distance_Sphere(
point (31.00000, 35.00000),
point(dest_latitude_0, dest_longitude_0)
) * 0.0001 as distance_in_km2
from most_places_used mpu
) t
where least (distance_in_km1, distance_in_km2) <= 0.001
order by least (distance_in_km1, distance_in_km2)
limit 1
请注意,我使用了子查询而不是 having
子句:这是一种更标准、更易读的处理方式,无论如何都不会影响性能。
如果不需要区分结果集中的两次计算,可以直接将least()
移动到子查询:
select *
from (
select
mpu.*,
least(
ST_Distance_Sphere(
point(31.00000, 35.00000),
point(latitude_0, longitude_0)
),
ST_Distance_Sphere(
point (31.00000, 35.00000),
point(dest_latitude_0, dest_longitude_0)
)
) * 0.0001 as distance_in_km
from most_places_used mpu
) t
where distance_in_km <= 0.001
order by distance_in_km
limit 1
我正在尝试在 1 个查询中使用 2 个相同的函数
select *, ST_Distance_Sphere( point(
31.00000, 35.00000),
point(latitude_0, longitude_0)) * .0001
as `distance_in_km` ,
ST_Distance_Sphere( point (
31.00000, 35.00000),
point(dest_latitude_0, dest_longitude_0)) * .0001
as `distance_in_km`
from `most_places_used`
having `distance_in_km` <= '0.001'
order by `distance_in_km` asc Limit 1
这只使用第一个函数,并且只为第一个 latlngs 给出正确的结果。
我需要几乎接近 2 个 latlngs 的行(latlngs 只是示例,不要在意它是否错误 <3)我想要它给我等于函数的行假设是函数4 列 latlngs
附近的 latlngs这是列名..如函数 ST_Distance_Sphere
(latitude_0, longitude_0, dest_latitude_0, dest_longitude_0)
我需要与此查询类似的东西做同样的需要或修复它 <3
您为两个不同的列提供了相同的别名,这使得您的查询对于要使用哪一个列进行过滤和排序变得不明确。我会推荐两个不同的别名和 least()
代替:
select *
from (
select
mpu.*,
ST_Distance_Sphere(
point(31.00000, 35.00000),
point(latitude_0, longitude_0)
) * 0.0001 as distance_in_km1,
ST_Distance_Sphere(
point (31.00000, 35.00000),
point(dest_latitude_0, dest_longitude_0)
) * 0.0001 as distance_in_km2
from most_places_used mpu
) t
where least (distance_in_km1, distance_in_km2) <= 0.001
order by least (distance_in_km1, distance_in_km2)
limit 1
请注意,我使用了子查询而不是 having
子句:这是一种更标准、更易读的处理方式,无论如何都不会影响性能。
如果不需要区分结果集中的两次计算,可以直接将least()
移动到子查询:
select *
from (
select
mpu.*,
least(
ST_Distance_Sphere(
point(31.00000, 35.00000),
point(latitude_0, longitude_0)
),
ST_Distance_Sphere(
point (31.00000, 35.00000),
point(dest_latitude_0, dest_longitude_0)
)
) * 0.0001 as distance_in_km
from most_places_used mpu
) t
where distance_in_km <= 0.001
order by distance_in_km
limit 1