MySQL - 查找MIN但不是零

时间:2010-01-20 07:36:23

标签: mysql

我正在尝试使用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_cost0,但其他列可以填充值。另一行可以包含每一列,但只有一列0。因此,不能使用WHERE条件过滤行。

3 个答案:

答案 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 #数据库