MySQL:获取每个唯一位置5英里内的客户总数
我有一个任务,我需要找到数据库中列出的每个地点5英里范围内的客户总数,我不太确定如何做到这一点。当谈到SQL查询时,我有点不知所措,而这个查询有点超出了我的知识范围。我现在有一个查询,将列出一个地点5英里内的所有客户,但我想得到他们所有人的报告。我需要查询显示如下内容:MySQL:获取每个唯一位置5英里内的客户总数,mysql,Mysql,我有一个任务,我需要找到数据库中列出的每个地点5英里范围内的客户总数,我不太确定如何做到这一点。当谈到SQL查询时,我有点不知所措,而这个查询有点超出了我的知识范围。我现在有一个查询,将列出一个地点5英里内的所有客户,但我想得到他们所有人的报告。我需要查询显示如下内容: --------------------------- | Store | Customers | | Store1 | 50 | | Store2 | 300 | |
---------------------------
| Store | Customers |
| Store1 | 50 |
| Store2 | 300 |
| Store3 | 210 |
. . .
. . .
---------------------------
my stores表的缩短模式如下所示:
此表由200个条目组成
-------------------------------------------
| ID | Lat | Lng |
| Store1 |43.7011526000 | -98.0822506000 |
| Store2 |42.7011526000 | -95.0822506000 |
. . . .
. . . .
-------------------------------------------
my customers表的缩短模式如下所示:
此表由16K+个条目和增长项组成
----------------------------------------------
| ID | Lat | Lng |
| customer1 |40.7011526000 | -93.0822506000 |
| customer2 |41.7011526000 | -96.0822506000 |
. . . .
. . . .
----------------------------------------------
这是我目前的查询,用于获取我们其中一家商店5英里内的客户总数:
select ID, ( 3959 * acos( cos( radians(43.7011526000) ) * cos( radians( Lat ) )
* cos( radians( Lng ) - radians(-98.0822506000) ) + sin( radians(43.7011526000) ) * sin(radians(Lat)) ) ) AS distance from customers having distance <= 5 order by distance;
选择ID,(3959*acos(弧度(43.7011526000))*cos(弧度(纬度))
*cos(radians(Lng)-radians(-98.0822506000))+sin(radians(43.7011526000))*sin(radians(Lat)))作为距离的客户的距离,您只需将两个表合并,并将数字计算在5以内:
select stores.name as Store,
sum( ( 3959 * acos( cos( radians(stores.Lat) ) * cos( radians(customers.Lat) ) * cos( radians(stores.Lng) - radians(customers.Lng) ) + sin( radians(stores.Lat) ) * sin(radians(Lat)) ) ) <= 5 ) as Customers
from stores
cross join customers
group by stores.ID,stores.name
选择stores.name作为Store,
总和((3959*acos(cos(radians(stores.Lat))*cos(radians(customers.Lat))*cos(radians(stores.Lng)-radians(customers.Lng))+sin(radians(stores.Lat))*sin(radians(Lat)))看-虽然我真的不明白你在努力解决这其中的哪一部分。@我不知道如何查询所有的商店,而不是一次只查询一个。这不是很难,不是吗。现在用这个距离公式做一个函数!!
select stores.name as Store,
count(customers.ID) as Customers
from stores
left join customers
on ( 3959 * acos( cos( radians(stores.Lat) ) * cos( radians(customers.Lat) ) * cos( radians(stores.Lng) - radians(customers.Lng) ) + sin( radians(stores.Lat) ) * sin(radians(Lat)) ) ) <= 5
group by stores.ID,stores.name