MySQL - 我正在尝试过滤 1.1*min(value) 和 0.9*max(value) 之间的值

MySQL - I'm trying to filter values between 1.1*min(value) and 0.9*max(value)

我有一列 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);

查询是 运行ning,但我得到 0 个错误的结果。

尝试使用 WHERE 而不是 HAVING 并且查询没有成功 运行。

看附件照片,我希望过滤掉1.2km、28.06km和30.13km的骑行(当然是针对这个具体数据)

感谢您的帮助

没有 Group by

Having 没有意义 您没有在 完整表达式 [=32= 上使用聚合函数时]. Having 在聚合阶段之后应用,如果要过滤聚合结果,可以使用

Having ride_distance_km BETWEEN ... 将无法确定要考虑比较 ride_distance_km 的哪个行值!我相信它不是标准的SQL,但由于MySQL的(错误)特征,它是允许的。但是,不能保证它会给出正确的结果(如上所述)。

一种方法是确定 Derived Table 中的 Min() and 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