我正在进行一个带有平均值的查询,只要距离达到90km:
SELECT avg(price),(6371 * acos(
cos( radians(-23.2632227) )
* cos( radians( lat ) )
* cos( radians( lng ) - radians(-45.9414303) )
+ sin( radians(-23.2632227) )
* sin( radians( lat ) )
)
) AS distance
FROM fcs_workers
HAVING distance < 90
问题是,当我把avg(price)计算出所有寄存器的平均值时,包括那些距离更远的寄存器。如果没有平均价格,它只会带来100公里范围内的平均值 没有平均(价格):
distance
78.82683615218286
6.351835016010867
平均(价格)
avg(price) |distance
76.66666666666667|78.82683615218286
我希望有平均价格,例如:110
表格:
id | name|price|lat |lng
1 |joana|100 |-23.542746 |-46.651302
2 |maria|120 |-23.241726 |-45.883827
3 |lucia|40 |-22.8117593|-45.1786567
Obrigado!
答案 0 :(得分:0)
使用子查询:
SELECT avg(price),
FROM (SELECT w.*,
(6371 * acos(
cos( radians(-23.2632227) )
* cos( radians( lat ) )
* cos( radians( lng ) - radians(-45.9414303) )
+ sin( radians(-23.2632227) )
* sin( radians( lat ) )
)
) AS distance
FROM fcs_workers
) w
WHERE distance < 90;
实际上,您还可以将HAVING
保留在子查询中。 。 。可能会有一点性能提升,因为它会减小中间表的大小。