Snowflake SQL:筛选完成步骤1-3但未执行步骤4-5的User_ID
Snowflake SQL 查询:筛选完成Step1-3但未执行Step4-5的用户
需求说明
从给定数据集提取已完成Step 1、Step 2、Step 3,但未执行Step 4、Step 5的用户,预期返回唯一的User_ID:User 1、User 4。
可行解决方案
方法1:分组聚合判断(推荐)
通过分组后统计用户的步骤完成情况,精准筛选符合条件的用户:
SELECT User_ID FROM your_table_name GROUP BY User_ID HAVING -- 确认用户完成了全部3个目标步骤 COUNT(DISTINCT CASE WHEN Steps IN ('Step 1', 'Step 2', 'Step 3') THEN Steps END) = 3 -- 确认用户未执行任何后续步骤 AND COUNT(DISTINCT CASE WHEN Steps IN ('Step 4', 'Step 5') THEN Steps END) = 0;
方法2:EXISTS/NOT EXISTS子查询
通过子查询分别验证用户的步骤完成状态,逻辑更直观:
SELECT DISTINCT u.User_ID FROM your_table_name u -- 验证用户完成了Step1、Step2、Step3 WHERE EXISTS (SELECT 1 FROM your_table_name WHERE User_ID = u.User_ID AND Steps = 'Step 1') AND EXISTS (SELECT 1 FROM your_table_name WHERE User_ID = u.User_ID AND Steps = 'Step 2') AND EXISTS (SELECT 1 FROM your_table_name WHERE User_ID = u.User_ID AND Steps = 'Step 3') -- 验证用户未执行Step4或Step5 AND NOT EXISTS (SELECT 1 FROM your_table_name WHERE User_ID = u.User_ID AND Steps IN ('Step 4', 'Step 5'));
为什么NOT IN没达到预期?
直接用WHERE Steps NOT IN ('Step 4', 'Step 5')只是过滤掉单条步骤记录,无法基于用户维度判断。比如User 2存在Step1-3的记录,这条语句会保留这些行,导致结果错误包含不符合条件的用户。必须从用户整体的步骤集合出发判断,而非单条行数据。
内容的提问来源于stack exchange,提问作者RaviB
相关产品推荐
相关产品推荐

