我有这个问题:
SELECT
count(*) as count ,
( 3959 * acos(
cos( radians( 37.774929 ) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians( -122.419418 ) )
+ sin( radians( 37.774929 ) ) * sin( radians( lat ) )
) ) AS distance
FROM users
HAVING distance < 150
我认为它会给我半径150英里的用户数量。但相反,它给了我一个用户总数。如果lat / lng不同,当有一些用户时,它会给我零用户数。
如何更改此查询以获取半径150米范围内的用户数量?
谢谢!
答案 0 :(得分:6)
您想使用WHERE子句
select count(*) as count from users WHERE ( 3959 * acos( cos( radians( 37.774929 ) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians( -122.419418 ) ) + sin( radians( 37.774929 ) ) * sin( radians( lat ) ) ) ) < 150
答案 1 :(得分:3)
扩展Dirk的答案......
此外,正如在Dirk的回答中,您无需在SELECT中进行计算即可在其他地方使用它。
因此,Dirk的答案计算每个ROW的距离(在连接之后,在聚合之前),然后丢弃距离为150或更多的任何一个。它只会聚合并计算所有内容。