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

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

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

  1. SELECT ride_distance_km
  2. FROM ride_data
  3. 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 条款。
请尝试以下查询:

  1. SELECT rd.ride_distance_km
  2. FROM ride_data AS rd
  3. JOIN
  4. (
  5. SELECT MIN(ride_distance_km) AS min_ride_distance,
  6. MAX(ride_distance_km) AS max_ride_distance
  7. FROM ride_data
  8. ) AS dt
  9. ON rd.ride_distance_km BETWEEN 1.1*dt.min_ride_distance AND
  10. 0.9*dt.max_ride_distance

相关问题