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

Snowflake SQL合并行:去用户名,保留YES值实现单用户单行

Snowflake SQL 处理用户产品使用记录去重合并

核心思路

同一用户的多条记录里,只要某产品有过YES标记就保留YES,只有全是NO才留NO,同时按用户唯一标识聚合,实现一行对应一个用户。直接用GROUP BY搭配聚合函数就能搞定,不用PARTITION BY那种行级筛选的方式。

实现代码

假设你的源表叫user_product_usage,结构包含user_id(用户唯一标识)、username(重复的用户名)、各产品列(比如product_a、product_b,值为YES/NO):

CREATE OR REPLACE TABLE user_product_summary AS
SELECT
    user_id,
    -- 对每个产品列取最大值,YES的优先级高于NO
    MAX(product_a) AS product_a,
    MAX(product_b) AS product_b,
    MAX(product_c) AS product_c
    -- 有更多产品列就继续按这个格式添加
FROM user_product_usage
-- 若要筛选特定产品,在这里加WHERE条件,比如 WHERE product_a = 'YES'
GROUP BY user_id;

原理说明

字符串排序逻辑里,YES的ASCII码比NO大,MAX()函数会自动保留该用户下对应产品的最高优先级值——只要有一行是YES,聚合结果就是YES;只有所有行都是NO时,结果才是NO。

之前用PARTITION BY没成功,是因为ROW_NUMBER()这类窗口函数只能选取某一行,没法把多行的YES/NO合并判断,而聚合函数刚好能解决这个跨行取值的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 10:05:01