需求如上图所示,万分感谢。。。
https://blog.csdn.net/zyjavaweb/article/details/80615205 mysql计算距离,如果订单量太多,效率似乎不高:https://blog.csdn.net/u011105380/article/details/80526791。你可以参考下
select table3.日期,table3.id,sum(table3.销量) from table3 left join table1 on table3.id=table1.id left join table2 on table3.id=table2.id
where table1.类型='A' and ( 6371* acos( cos( radians(37) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin( radians( lat ) ) ) )<10
group by table3.日期,table3.id
10公里以内的销量总和 指的是 某个id 为中心点的10公里以内的(包括其他id)销量总和?
那么,建议你根据表2 重新计算弄个新表:大概如下
id|10公里以内的id
-|-
这样再去查询就只是3个表的联合查询而已了。
这个建议分两次查询吧,第一次根据table1中的A对应的id从table2中查出相应的经纬度,然后在算出那些id是属于十公里内的,然后在使用这些id从table3中查出销量。
select a.日期,a.id,sum(d.销量)
from
(select * from table1 where 类型='A') a
join table2 b --取出A类型的id经纬度
on a.id=b.id
join table2 c --关联所有id经纬度,计算距离,where 中过滤
on 1=1
join table3 d --关联的id销量用于求和
on c.id=d.id
where
(6371 * acos(cos(radians(b.纬度)) * cos(radians(c.纬度)) * cos(radians(b.经度) - radians(c.经度)) +
sin(radians(b.纬度)) * sin(radians(c.纬度))))<10
group by a.日期,a.id