COUNT (*) и наличие - PullRequest
       2

COUNT (*) и наличие

4 голосов
/ 29 августа 2011

Следующий запрос возвращает столбец расстояний. Но мне нужно только подсчитать результаты с соответствующими расстояниями, а не сами расстояния. Подвыбор не может быть использован.

SELECT 
( 6368 * SQRT(2*(1-cos(RADIANS(loc_lat)) * cos(0.899945742869) * (sin(RADIANS(`loc_lon`)) * sin(0.14286767838) + cos(RADIANS(`loc_lon`)) * cos(0.14286767838)) - sin(RADIANS(loc_lat)) * sin(0.899945742869))) ) AS Distance

FROM ...

WHERE ...

HAVING Distance > 0 AND Distance <= 25 

Ответы [ 3 ]

3 голосов
/ 29 августа 2011

Вам просто нужно переместить расчет расстояния в предложение where:

SELECT COUNT(*) FROM ...

WHERE ( 6368 * SQRT(2*(1-...) BETWEEN 0 AND 25
2 голосов
/ 29 августа 2011

Если вам не нужны расстояния, только счет, может быть, это будет работать:

SELECT Count(*)
FROM ...
WHERE ... AND
  (6368 * SQRT(2*(1-cos(RADIANS(loc_lat)) * cos(0.899945742869) *
  (sin(RADIANS(`loc_lon`)) * sin(0.14286767838) + cos(RADIANS(`loc_lon`)) *
   cos(0.14286767838)) - sin(RADIANS(loc_lat)) * sin(0.899945742869)))
  ) BETWEEN 0 AND 25
1 голос
/ 29 августа 2011

Это даст итоговые результаты, и вы можете отбросить другой столбец.

 SELECT COUNT(*) totalResults, 
    ( 6368 * SQRT(2*(1-cos(RADIANS(loc_lat)) * cos(0.899945742869) * (sin(RADIANS(`loc_lon`)) * sin(0.14286767838) + cos(RADIANS(`loc_lon`)) * cos(0.14286767838)) - sin(RADIANS(loc_lat)) * sin(0.899945742869))) ) AS Distance

    FROM ...

    WHERE ...

    HAVING Distance > 0 AND Distance <= 25 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...