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

在Snowflake中基于城市内产品的厂商供应情况添加标识字段

在Snowflake数据表中添加Flag标识字段的实现方案

需求规则

  • 同一城市+产品组合下,同时由厂商1和厂商2供应 → 标识为man_1_2
  • 同一城市+产品组合下,仅由厂商1供应 → 标识为man_1
  • 同一城市+产品组合下,仅由厂商2供应 → 标识为man_2

实现方案

方案1:使用窗口函数直接计算

利用Snowflake窗口函数特性,无需预聚合即可为每行生成目标标识,执行效率较高:

SELECT 
    City,
    Product,
    Manufacturer,
    CASE 
        -- 分组内存在两个不同供应商时标记
        WHEN COUNT(DISTINCT Manufacturer) OVER (PARTITION BY City, Product) = 2 THEN 'man_1_2'
        -- 分组内仅存在厂商1时标记
        WHEN MAX(Manufacturer) OVER (PARTITION BY City, Product) = 1 THEN 'man_1'
        -- 剩余情况即为仅厂商2供应
        ELSE 'man_2'
    END AS Flag
FROM your_table_name;

方案2:先聚合再关联

先通过分组聚合得到每个城市+产品对应的标识,再关联回原表,逻辑更直观易懂:

WITH product_supplier_flags AS (
    SELECT 
        City,
        Product,
        CASE 
            WHEN COUNT(DISTINCT Manufacturer) = 2 THEN 'man_1_2'
            WHEN MAX(Manufacturer) = 1 THEN 'man_1'
            ELSE 'man_2'
        END AS Flag
    FROM your_table_name
    GROUP BY City, Product
)
SELECT 
    t.City,
    t.Product,
    t.Manufacturer,
    psf.Flag
FROM your_table_name t
JOIN product_supplier_flags psf 
    ON t.City = psf.City 
    AND t.Product = psf.Product;

验证说明

以你提供的示例数据为例:

  • City=1、Product=3的分组下包含厂商1和2,所有行Flag为man_1_2
  • City=2、Product=6的分组下仅存在厂商1,所有行Flag为man_1
  • City=1、Product=2仅厂商1供应,Flag为man_1;Product=4仅厂商2供应,Flag为man_2
    完全匹配需求规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 03:30:44