Haversine 公式 SQL 查询中记录的分组和计数

Grouping and counting of records in Haversine Formula SQL Query

我在一个汽车交易网站上工作。我有 table 命名的车辆,其中包含大约 20 个字段,包括车辆的品牌、型号等。我正在编写一个搜索查询,以按制造商检索系统组中的所有汽车及其计数。

所以我的 objective 是让系统中的所有车辆按品牌分组以及品牌计数,但计数部分无法正常工作。 returns 忽略我的距离计算标准的汽车总数。

我正在执行以下 SQL:

SELECT * FROM (SELECT *,ROUND(((ACOS(SIN(51.4811109 * PI() / 180) * SIN(latitude * PI() / 180) + COS(51.4811109 * PI() / 180) * COS(latitude * PI() / 180) * COS((-0.433641 - longitude) * PI() / 180)) * 180 / PI()) * 60 * 1.1515),2) AS distance, count(make) AS carcount FROM `vehicle` `t` WHERE (status='Active')) as v GROUP BY make HAVING distance<=10  

它返回的一切都是正确的,除了 carcount 它 returns 系统中有 325 辆 BMW 汽车(系统中的 BMW 汽车总数)而不是 12 辆 BMW 汽车(系统中只有 10 辆汽车) 10 英里距离)。

谁能看出我做错了什么?感谢您的帮助。

你需要在 where 子句中没有条件

SELECT *, count(*)
FROM 
(SELECT *,ROUND(((ACOS(SIN(51.4811109 * PI() / 180) * 
              SIN(latitude * PI() / 180) + COS(51.4811109 * 
              PI() / 180) *
              COS(latitude * PI() / 180) * 
              COS((-0.433641 - longitude) * PI() / 180)) *
              180 / PI()) * 60 * 1.1515),2) AS distance
FROM `vehicle` `t` 
WHERE (status='Active')) as v
WHERE distance<=10 
GROUP BY make 

试试这个

SELECT make, count(*) 
FROM vehicle
Where 
ROUND(((ACOS(SIN(51.4811109 * PI() / 180) * SIN(latitude * PI() / 180) + COS(51.4811109 * PI() / 180) * COS(latitude * PI() / 180) * COS((-0.433641 - longitude) * PI() / 180)) * 180 / PI()) * 60 * 1.1515),2) <= 10
    And status='Active
  GROUP BY make