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

Snowflake技术问询:如何获取LEAST函数取值对应的列名?

如何在Snowflake中获取最小值对应的列名

在Snowflake查询中已生成Rank_A和Rank_B列,并用LEAST函数得到每行的最小值,现在需要新增一列显示该最小值来自哪一列,期望输出如下:

Rank_ARank BLEASTColumn Name of Least Value
131Rank_A
242Rank_A
544Rank_B

以下是两种Snowflake原生解决方案:

方法1:使用CASE WHEN逻辑判断

针对仅两列的场景,直接通过CASE WHEN比较值即可,逻辑清晰直观:

SELECT
    Rank_A,
    Rank_B,
    LEAST(Rank_A, Rank_B) AS LEAST,
    CASE
        WHEN Rank_A <= Rank_B THEN 'Rank_A'
        ELSE 'Rank_B'
    END AS "Column Name of Least Value"
FROM
    your_table; -- 替换为你的表名或子查询

说明:若两列值相等,此逻辑会优先返回Rank_A;若需要优先返回Rank_B,可调整判断条件为WHEN Rank_B < Rank_A THEN 'Rank_B' ELSE 'Rank_A'。

方法2:使用数组函数适配多列场景

如果后续需要处理3列及以上的情况,可通过Snowflake数组函数实现通用方案:

SELECT
    Rank_A,
    Rank_B,
    LEAST(Rank_A, Rank_B) AS LEAST,
    ARRAY_CONSTRUCT('Rank_A', 'Rank_B')[ARRAY_POSITION(ARRAY_CONSTRUCT(Rank_A, Rank_B), LEAST(Rank_A, Rank_B)) - 1] AS "Column Name of Least Value"
FROM
    your_table; -- 替换为你的表名或子查询

说明:

  1. ARRAY_CONSTRUCT(Rank_A, Rank_B)生成当前行的数值数组
  2. ARRAY_POSITION定位最小值在数组中的位置(Snowflake数组索引从1开始,需减1适配列名数组的0起始索引)
  3. 通过列名数组ARRAY_CONSTRUCT('Rank_A', 'Rank_B')获取对应列名

此方法无需修改判断逻辑,仅需扩展数组中的列名和列值即可适配更多列的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 18:55:30