簡體   English   中英

計數查詢返回意外結果

[英]Count query returning unexpected results

我有這個問題:

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米半徑范圍內的用戶數?

謝謝!

您想使用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

擴展Dirk的答案......

  • WHERE子句在它們全部連接后應用於記錄。
  • 在任何聚合完成后應用HAVING子句。

此外,正如在Dirk的回答中,您不需要在SELECT中進行計算就可以在其他地方使用它。

因此,Dirk的答案計算每個ROW的距離(在連接之后,在聚合之前),然后丟棄任何距離為150或更多的任何一個。 它只會聚合並計算一切。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM