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

在Snowflake中如何从N列获取每行的非空最小值?

忽略NULL值获取行内最小值的解决方案

针对你遇到的SMALLEST函数因NULL值返回NULL的问题,不同数据库有不同的处理方式,以下是几种常见数据库的实现方案:

MySQL/MariaDB

MySQL的LEAST函数只要参数中有NULL就会返回NULL,因此需要用IFNULL将NULL替换为一个远大于实际数据的极大值,确保它不会影响最小值的计算:

SELECT 
    ID,
    Col1,
    Col2,
    Col3,
    Col4,
    LEAST(
        IFNULL(Col1, 999999999),
        IFNULL(Col2, 999999999),
        IFNULL(Col3, 999999999),
        IFNULL(Col4, 999999999)
    ) AS ExpectedOutput
FROM your_table;

注意:极大值的选择要根据你实际数据的范围调整,避免和真实数据冲突。

PostgreSQL

PostgreSQL的LEAST函数会自动忽略NULL值(仅当所有参数都是NULL时才返回NULL),直接使用即可:

SELECT 
    ID,
    Col1,
    Col2,
    Col3,
    Col4,
    LEAST(Col1, Col2, Col3, Col4) AS ExpectedOutput
FROM your_table;

SQL Server

SQL Server没有内置的LEAST函数,可以通过将列转为行数据,再取最小值的方式实现:

SELECT 
    ID,
    Col1,
    Col2,
    Col3,
    Col4,
    (SELECT MIN(val) FROM (VALUES (Col1), (Col2), (Col3), (Col4)) AS temp(val)) AS ExpectedOutput
FROM your_table;

通用方案(适用于所有数据库)

如果列数较少,也可以用CASE表达式逐个判断,逻辑清晰但扩展性差:

SELECT 
    ID,
    Col1,
    Col2,
    Col3,
    Col4,
    CASE
        WHEN Col1 IS NOT NULL AND (Col2 IS NULL OR Col1 <= Col2) AND (Col3 IS NULL OR Col1 <= Col3) AND (Col4 IS NULL OR Col1 <= Col4) THEN Col1
        WHEN Col2 IS NOT NULL AND (Col3 IS NULL OR Col2 <= Col3) AND (Col4 IS NULL OR Col2 <= Col4) THEN Col2
        WHEN Col3 IS NOT NULL AND (Col4 IS NULL OR Col3 <= Col4) THEN Col3
        ELSE Col4
    END AS ExpectedOutput
FROM your_table;

内容的提问来源于stack exchange,提问作者jeena p

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 00:35:21