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

Snowflake中如何筛选含指定值分组的所有行记录

实现方案

你的需求既可以用分区窗口函数实现,也可以用兼容性更强的分组子查询实现,两种方案都能精准满足「保留含US记录的PET分组下全部行、整体排除无US记录的PET分组」的过滤规则,具体写法如下:

方案1:分区窗口函数实现

按PET字段分区,统计每个PET分组内COUNTRY值为US的记录数量,只要计数大于0就保留该分组所有行,写法如下:

SELECT ID, PET, COUNTRY
FROM (
    SELECT
        *,
        SUM(CASE WHEN COUNTRY = 'US' THEN 1 ELSE 0 END) OVER (PARTITION BY PET) AS us_flag
    FROM A
) temp
WHERE us_flag > 0;

逻辑说明:窗口函数会把同一个PET值的所有记录划到同一个分区,分区内只要存在1条COUNTRY='US'的记录,该分区下所有行的us_flag值都会等于US记录的条数(你的场景下每个PET固定2条记录,有US的组us_flag值为1,无US的组值为0),外层直接过滤us_flag>0即可拿到符合要求的结果。

方案2:IN子查询实现(全SQL版本兼容)

不需要窗口函数支持,先查出所有包含US记录的PET值集合,再回表筛选对应PET的全部行即可,写法更简洁:

SELECT ID, PET, COUNTRY
FROM A
WHERE PET IN (
    SELECT PET
    FROM A
    WHERE COUNTRY = 'US'
    GROUP BY PET
);

针对你给出的样例数据,上述两种写法都会排除无US记录的SNAKE、HORSE分组,完整返回DOG、CAT、PIG三个分组下的所有记录,和预期结果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 21:36:17