我正在尝试筛选介于1.1*min(value)和0.9*max(value)之间的值

qybjjes1  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(387)

我有一个纵列骑行距离公里,我尝试了以下方法:

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而不是have,查询没有运行。

查看随附的照片,我希望过滤掉1.2公里,28.06公里和30.13公里的车程(对于这个具体的数据当然)
谢谢你的帮助

nnt7mjpx

nnt7mjpx1#

Having 没有 Group by 如果不在完整表达式上使用聚合函数,则没有意义。 Having 在聚合阶段之后应用,如果要筛选聚合结果,则可以使用。 Having ride_distance_km BETWEEN ... 将无法确定的行值 ride_distance_km 考虑比较!我相信它不是标准的sql,但是由于mysql的(mis)特性,它是允许的。但是,不能保证它会给出正确的结果(如上所述)。
一种方法是确定 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

相关问题