获得平均价值

时间:2017-05-25 16:48:12

标签: php sql

我正在进行一个带有平均值的查询,只要距离达到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!

1 个答案:

答案 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保留在子查询中。 。 。可能会有一点性能提升,因为它会减小中间表的大小。