gpt4 book ai didi

mysql - 无法理解在mysql查询中使用聚合函数的结果

转载 作者:搜寻专家 更新时间:2023-10-30 22:16:21 24 4
gpt4 key购买 nike

我的数据库中有一个名为 cities 的表,其中包含 id、name、country_id、lat(latitude) 和 lng(longitude)。在我的应用程序中,我获取了用户的位置,然后尝试找出距离用户位置最近的城市,所以一开始我做了这样的事情:

select * , ( sqrt( pow(lat - 31.205 , 2) + pow(lng - 29.907 , 2) ) ) as min_dis from cities

返回的结果如下:

+----+------------------+------------+---------------+---------------+----------------------+
| id | name | country_id | lat | lng | min_dis |
+----+------------------+------------+---------------+---------------+----------------------+
| 1 | Cairo | 61 | 30.0444196000 | 31.2357116000 | 1.7642055948326205 |
| 2 | Alexandria | 61 | 31.2000924000 | 29.9187387000 | 0.012723270627083274 |
| 3 | Tanta | 61 | 30.7865086000 | 31.0003757000 | 1.1707286078440424 |
| 7 | North Coast | 61 | 28.0488161000 | 34.4371483000 | 5.521208240105792 |
| 8 | Marsa Matruh | 61 | 31.3543445000 | 27.2373159000 | 2.673858069059212 |
| 9 | Hurghada | 61 | 27.2578957000 | 33.8116067000 | 5.552079415567052 |
| 10 | Ismailia | 61 | 30.5964923000 | 32.2714587000 | 2.4415049795085366 |
| 11 | Ain ElSokhna | 61 | 29.5927778000 | 32.3416667000 | 2.920079170546876 |
| 12 | El Mansoura | 61 | 31.0409483000 | 31.3784704000 | 1.480587078948432 |
+----+------------------+------------+---------------+---------------+----------------------+

正如您在结果“Alexandria”中看到的那样,ID=2 的城市距离用户所在的位置最近。

当我尝试这样的事情时:

select MIN( sqrt( pow(lat - 31.205 , 2) + pow(lng - 29.907 , 2) ) ) as min_dis from cities;

我明白了:

+----------------------+
| min_dis |
+----------------------+
| 0.012723270627083274 |
+----------------------+

这对我来说很有意义......但是当我尝试这样做时:

select * , MIN( sqrt( pow(lat - 31.205 , 2) + pow(lng - 29.907 , 2) ) ) as min_dis from cities;

我明白了:

+----+-------+------------+---------------+---------------+----------------------+
| id | name | country_id | lat | lng | min_dis |
+----+-------+------------+---------------+---------------+----------------------+
| 1 | Cairo | 61 | 30.0444196000 | 31.2357116000 | 0.012723270627083274 |
+----+-------+------------+---------------+---------------+----------------------+

返回的min_dis是正确的,但是城市数据不对!!我认为它应该返回“Alexandria”的记录,但它没有..有谁知道为什么吗??

编辑:这个查询对我有用:

SELECT `cities`.* FROM `cities` WHERE ((sqrt(pow(lat - 31.205 , 2) + pow(lng - 29.907 , 2)))= (SELECT MIN((sqrt(pow(lat - 31.205 , 2) + pow(lng - 29.907 , 2)))) AS min_id FROM `cities` ))

并返回:

+----+------------+------------+---------------+---------------+
| id | name | country_id | lat | lng |
+----+------------+------------+---------------+---------------+
| 2 | Alexandria | 61 | 31.2000924000 | 29.9187387000 |
+----+------------+------------+---------------+---------------+

我只想了解为什么这个查询不起作用?

select * , MIN( sqrt( pow(lat - 31.205 , 2) + pow(lng - 29.907 , 2) ) ) as min_dis from cities;

最佳答案

试试这个:

select * , ( sqrt( pow(lat - 30.4990 , 2) + pow(lng - 29.4435 , 2) ) ) 
as min_dis
from cities
order by sqrt( pow(lat - 30.4990 , 2) + pow(lng - 29.4435 , 2) )
limit 1

您只需在第一个查询中按以下方式排序即可获得结果

关于mysql - 无法理解在mysql查询中使用聚合函数的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11774437/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com