如何在Redshift中用SQL提取包含Apple的全部交易记录
提取包含特定商品的Redshift交易记录SQL方案
要提取所有包含Apple的交易记录(即只要某交易ID下存在Apple,该交易的所有商品条目都需保留),可以用以下两种高效的SQL实现方式:
方法一:子查询关联筛选
先筛选出所有包含Apple的交易ID,再关联原交易表获取完整交易记录:
SELECT t.客户ID, t.交易ID, t.商品 FROM 交易表 t INNER JOIN ( SELECT DISTINCT 交易ID FROM 交易表 WHERE 商品 = 'Apple' ) apple_trans ON t.交易ID = apple_trans.交易ID ORDER BY t.交易ID, t.商品;
说明:子查询通过DISTINCT去重交易ID,避免重复关联,提升查询效率,最终返回所有目标交易下的全部商品行。
方法二:窗口函数标记筛选
利用窗口函数按交易ID分组,标记包含Apple的交易,再过滤出目标记录:
SELECT 客户ID, 交易ID, 商品 FROM ( SELECT 客户ID, 交易ID, 商品, COUNT(CASE WHEN 商品 = 'Apple' THEN 1 END) OVER(PARTITION BY 交易ID) AS has_apple FROM 交易表 ) transaction_with_flag WHERE has_apple > 0 ORDER BY 交易ID, 商品;
说明:窗口函数COUNT(...) OVER(PARTITION BY 交易ID)统计每个交易中Apple的出现次数,次数大于0则说明该交易包含Apple,进而保留整个交易的所有条目,无需额外关联操作。
两种方法均能得到你预期的结果,可根据数据表的规模选择合适的方案。
内容的提问来源于stack exchange,提问作者Ameer
相关产品推荐
相关产品推荐

