Having
без Group by
не имеет смысла , когда вы не используете агрегатные функции для полного выражения . Having
применяется после фазы агрегации, и может использоваться , если вы хотите фильтровать результаты агрегирования.
Having ride_distance_km BETWEEN ...
не сможет определить, какое значение строки для ride_distance_km
следует рассмотреть для сравнения! Я считаю , что это не стандартный SQL, но из-за (неправильной) возможности MySQL это разрешено. Однако нет гарантии, что он даст правильные результаты (как описано выше).
Один из подходов состоит в определении значений Min()
и Max()
в производной таблице. Затем мы можем использовать эти агрегированные значения для дальнейшей фильтрации внутри предложения join On
.
Попробуйте вместо этого следующий запрос:
SELECT rd.ride_distance_km
FROM ride_data AS rd
JOIN
(
SELECT MIN(ride_distance_km) AS min_ride_distance,
MAX(ride_distance_km) AS max_ride_distance
FROM ride_data
) AS dt
ON rd.ride_distance_km BETWEEN 1.1*dt.min_ride_distance AND
0.9*dt.max_ride_distance