我有一列ride_distance_km,并且尝试了以下操作:
SELECT ride_distance_km
FROM ride_data
HAVING ride_distance_km BETWEEN 1.1*min(ride_distance_km) and 0.9*max(ride_distance_km);
查询正在运行,但是我得到0个结果,这是错误的。
尝试了WHERE而不是HAVING并且查询未运行。
通过查看所附照片,我希望能过滤掉1.2公里,28.06公里和30.13公里的行程(当然是针对此特定数据)
感谢您的帮助
答案 0 :(得分:0)
Having
的 Group by
没有任何意义。 Having
在汇总阶段之后应用,如果要过滤汇总结果,可以使用 。
Having ride_distance_km BETWEEN ...
将无法确定要比较的ride_distance_km
的哪一行值!我相信,它不是标准SQL,但是由于MySQL的(错误)功能,因此可以使用。但是,不能保证会给出正确的结果(如上所述)。
一种方法是确定派生表中的Min()
和Max()
值。然后,我们可以利用这些聚合值在连接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