You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何比较两列取最小值且忽略零值(两列均为零除外)

解决两列取最小值时忽略零值(仅两列均为零时保留零)的SQL问题

问题场景

需要对比数据表中Unit value和Unit Ext value两列,获取最小值,规则如下:

  • 忽略两列中的零值,仅当两列均为零时保留零值
  • 处理NULL值,两列均为NULL时返回NULL

原数据表:

Id  Unit value  Unit Ext value
1       0       12
2       15      10
3       8       25
4       15      15
5       0       0
6       4       0
7       Null    Null

期望结果:

Id  Unit value  Unit Ext value  min value
1       0           12              12
2       15          10              10
3       8           25              8
4       15          15              15
5       0           0               0
6       4           0               4
7       Null        Null            Null

原查询语句的问题

原CASE语句未处理零值过滤逻辑,当其中一列是0时会直接返回0,导致ID=1和ID=6的行结果错误:

case when unitvalue<Unit Ext value  then Unit value
     when unitvalue>Unit Ext then Unit Ext value 
end min value

正确解决方案

通过NULLIF将0转换为NULL,结合LEAST函数忽略NULL取最小值,同时单独处理两列均为0的特殊情况:

SELECT 
    Id,
    `Unit value`,
    `Unit Ext value`,
    CASE
        WHEN `Unit value` = 0 AND `Unit Ext value` = 0 THEN 0
        ELSE LEAST(NULLIF(`Unit value`, 0), NULLIF(`Unit Ext value`, 0))
    END AS `min value`
FROM your_table_name;

逻辑说明

  • NULLIF(col, 0):将列中的0替换为NULL,让LEAST函数计算时自动忽略这些零值
  • LEAST(a, b):返回两值中的较小值,若其中一个为NULL则返回非NULL值;两值均为NULL时返回NULL
  • 外层CASE优先判断两列是否均为0,这种场景直接返回0,确保规则生效

内容的提问来源于stack exchange,提问作者Mike Swift

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 16:45:13