【问题标题】:MySQL - Find MIN but not zeroMySQL - 查找 MIN 但不为零
【发布时间】:2011-01-07 04:03:00
【问题描述】:

我正在尝试使用MIN 函数获取 MySQL 中列的最小值。但是有可能告诉 MySQL 忽略零值吗?问题是我将0 存储为默认值而不是NULL 用于tinyint 列。我想要的是得到大于 0 的最小值。

SELECT a.baseloc_id, 
a.baseloc_latitude, 
a.baseloc_longitude, 
a.baseloc_distance, 
MIN(b.basecost_ton2_cost) as minTon2, 
MIN(b.basecost_ton3_cost) as minTon3, 
MIN(b.basecost_ton10_cost) as minTon10 
FROM bbox_logi_base_locations a 
LEFT JOIN bbox_logi_base_cost b 
    USING (baseloc_id) 
GROUP BY a.baseloc_id;

感谢您的帮助。

编辑 01:

对不起,我忘了提到这一点。 bbox_logi_base_cost 表的行包含碎片值。例如,一行可以将basecost_ton2_cost 设置为0,但其他列则填充了值。另一行可以包含除0 之外的每一列。所以不能使用WHERE 条件过滤任何行。

【问题讨论】:

  • 你能上传查询吗?
  • @haim evgi - 我已经上传了查询。请看一看。

标签: mysql


【解决方案1】:

使用这个:

MIN(NULLIF(value, 0))

【讨论】:

  • @David:太美了!解决了这个问题。 NULLIF 的创意用法很好!
  • 嘿嗨,如果最高值为 0,则返回 Null,但是如果列中不存在大于零的值,并且存在大于零的值,我想选择 0 怎么办?最低限度。
  • 非常好的解决方案!!
  • @Priyanshu ISNULL(MIN(NULLIF(value, 0)), 0) 可以解决问题
【解决方案2】:

你的正确答案是:

IFNULL(MIN(NULLIF(value, 0)), 0)

虽然ISNULL 不工作。

【讨论】:

    【解决方案3】:

    一个快速说明,帮助我记住如何执行此操作。

    问题:您想从一组值中选择最小值。

    假设您有一个位于逻辑组中的产品表,并且您想从该组中选择价格最低的产品,但有些产品的价格实际上是 0.00(无论出于何种原因)。您不想实际显示 0.00 作为这组产品的最低价格,而是希望显示恰好大于零的最低价格。

    MySQL 有一个巧妙的方法来做到这一点。去吧:

    SELECT tableref.group_id, MIN(NULLIF(tableref.column, 0)) as min_price FROM tableref GROUP BY tableref.group_id;
    

    神奇之处在于 NULLIF 函数,如果 tableref.column 等于 0,它将返回 null。返回 null 会将该值从 MIN 包含中删除,具有强制列值大于零的效果。

    #MySQL #数据库

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-27
      • 1970-01-01
      • 2012-07-08
      • 2015-03-24
      • 2011-04-22
      • 1970-01-01
      • 1970-01-01
      • 2016-07-06
      相关资源
      最近更新 更多