我正在尝试使用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;
感谢您的帮助。
抱歉,我忘记提及此事了。 bbox_logi_base_cost
表包含包含碎片值的行。例如,一行可以basecost_ton2_cost
为0
,但其他列可以填充值。另一行可以包含每一列,但只有一列0
。因此,不能使用WHERE
条件过滤行。
答案 0 :(得分:72)
使用此:
MIN(NULLIF(value, 0))
答案 1 :(得分:0)
正确的答案是:
IFNULL(MIN(NULLIF(value, 0)), 0)
ISNULL
无法正常工作。
答案 2 :(得分:0)
帮助我记住如何执行此操作的快速注释。
问题:您想从一组值中选择最小值。
假设您有一个逻辑组中的产品表,并且您想从该组中选择价格最低的产品,但是有些产品的实际价格为 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 #数据库