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

时间:2018-11-02 07:37:49

标签: mysql filter max min having

我有一列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并且查询未运行。

---exemplary data preview---

通过查看所附照片,我希望能过滤掉1.2公里,28.06公里和30.13公里的行程(当然是针对此特定数据)

感谢您的帮助

1 个答案:

答案 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