【问题标题】:MySQL - I'm trying to filter values between 1.1*min(value) and 0.9*max(value)MySQL - 我正在尝试过滤 1.1*min(value) 和 0.9*max(value) 之间的值
【发布时间】:2019-04-06 10:53:57
【问题描述】:

我有一个专栏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 并且查询没有运行。

查看附图,我希望过滤掉 1.2 公里、28.06 公里和 30.13 公里的骑行(当然是针对这个特定数据)

感谢您的帮助

【问题讨论】:

标签: mysql filter max min having


【解决方案1】:

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

【讨论】:

  • 非常感谢,我想我已经知道了
猜你喜欢
  • 2012-06-26
  • 1970-01-01
  • 2020-09-09
  • 2010-11-01
  • 1970-01-01
  • 2021-01-27
  • 1970-01-01
  • 2020-03-25
  • 1970-01-01
相关资源
最近更新 更多