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