Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql查询,使用用户当前经纬度获取距离,按分支分组,最后得到离商店最近的分支_Mysql_Sql_Group By - Fatal编程技术网

Mysql查询,使用用户当前经纬度获取距离,按分支分组,最后得到离商店最近的分支

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),

我想从用户当前位置查找最近的商店分支

我的餐厅餐桌如下图所示

注意:-一个商店可以有多个分支机构,因此我使用“品牌代码”分组 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), 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
?它不在样本数据中。