AWS Redshift按用户统计全量记录均超阈值的记录数
解决方案:筛选所有记录均大于阈值的用户并统计条数
嘿,这个需求在AWS Redshift里很容易实现,我给你两种实用的方案,你可以根据场景选择:
方法一:使用GROUP BY + HAVING(简洁高效)
这种方法利用了如果一个用户的最小records值都大于阈值,那他所有的records肯定都满足条件的逻辑,代码非常简洁:
SELECT user_id, COUNT(*) AS count FROM mytable GROUP BY user_id HAVING MIN(records) > 400;
逻辑说明:
- 按
user_id分组,把每个用户的所有记录归到一组 - 用
HAVING MIN(records) > 400过滤掉那些存在records≤400的用户(因为只要有一条不满足,MIN值就会≤400) - 最后对符合条件的用户统计记录条数,正好匹配你的预期结果
方法二:使用窗口函数(灵活拓展)
如果之后你需要更复杂的条件判断,窗口函数的方式会更灵活,先标记用户是否存在不符合条件的记录,再筛选统计:
WITH user_records AS ( SELECT user_id, records, -- 标记当前用户是否有records≤400的记录:有则为1,无则为0 MAX(CASE WHEN records <= 400 THEN 1 ELSE 0 END) OVER (PARTITION BY user_id) AS has_invalid FROM mytable ) SELECT user_id, COUNT(*) AS count FROM user_records WHERE has_invalid = 0 -- 只保留没有无效记录的用户 GROUP BY user_id;
逻辑说明:
- 先用CTE给每条记录加上一个
has_invalid标记,通过窗口函数PARTITION BY user_id判断该用户是否存在不符合条件的记录 - 筛选出
has_invalid=0的记录(也就是用户所有记录都满足>400) - 最后按用户分组统计条数
两种方法都能得到你想要的结果:
| user_id | count |
|---|---|
| 0 | 2 |
| 2 | 1 |
内容的提问来源于stack exchange,提问作者aviss
相关产品推荐
相关产品推荐

