Mysql查询,使用用户当前经纬度获取距离,按分支分组,最后得到离商店最近的分支
我想从用户当前位置查找最近的商店分支 我的餐厅餐桌如下图所示 注意:-一个商店可以有多个分支机构,因此我使用“品牌代码”分组 MySQL版本为:8.0.21 我不知道怎样才能在小组里找到最近的分店Mysql查询,使用用户当前经纬度获取距离,按分支分组,最后得到离商店最近的分支,mysql,sql,group-by,Mysql,Sql,Group By,我想从用户当前位置查找最近的商店分支 我的餐厅餐桌如下图所示 注意:-一个商店可以有多个分支机构,因此我使用“品牌代码”分组 MySQL版本为:8.0.21 我不知道怎样才能在小组里找到最近的分店 SELECT a.* , POW(69.1 * (a.address_lat - 26.855298971417806), 2) + POW(69.1 * (75.81484306777995 - a.address_long) * COS(a.address_lat / 57.3),
SELECT a.*
, POW(69.1 * (a.address_lat - 26.855298971417806), 2) + POW(69.1 * (75.81484306777995 - a.address_long) * COS(a.address_lat / 57.3), 2) AS distance
FROM restaurant as a
where city_id in (34)
group
by a.brandcode
order
by distance ASC
limit 0 , 20
请帮帮我
谢谢如果希望每个branchcode一行,请使用窗口功能:
with r as (
select r.*,
POW(69.1 * (a.address_lat - 26.855298971417806), 2) + POW(69.1 * (75.81484306777995 - a.address_long) * COS(a.address_lat / 57.3), 2) AS distance
from restaurant r
where r.city_id in (34)
)
select r.*
from (select r.*,
row_number() over (partition by branchcode order by distance) as seqnum
from r
) r
where seqnum = 1
order by distance ASC
limit 0, 20;
如果希望每个branchcode一行,请使用窗口函数:
with r as (
select r.*,
POW(69.1 * (a.address_lat - 26.855298971417806), 2) + POW(69.1 * (75.81484306777995 - a.address_long) * COS(a.address_lat / 57.3), 2) AS distance
from restaurant r
where r.city_id in (34)
)
select r.*
from (select r.*,
row_number() over (partition by branchcode order by distance) as seqnum
from r
) r
where seqnum = 1
order by distance ASC
limit 0, 20;
重要的是,您正在运行的MySQL版本是什么?我想找到商店最近的分支-一个分支(不是“分支”)和
限制0,20
?真奇怪。一个商店可以有多个分支,所以我使用group by“brandcode”。一个分支可能位于许多不同的地方?请注意,如果没有主键,您就没有真正的表。例如,我的表中有主键,还有很多其他字段,如store lat、log等。什么是brandcode
?它不在示例数据中。重要的是,您正在运行的MySQL版本是什么?我想找到商店最近的分支-一个分支(不是“分支”)和限制0,20
?真奇怪。一个商店可以有多个分支,所以我使用group by“brandcode”。一个分支可能位于许多不同的地方?请注意,如果没有主键,您就没有真正的表。例如,我的表中有主键,还有很多其他字段,如store lat、log等。什么是brandcode
?它不在样本数据中。