如何用SQL查询同时被customer_id 100与101至少购买过一次的商品的交易记录
SQL查询方案
实现逻辑
- 先通过分组聚合筛选出同时被用户100、101购买过的商品:过滤两个用户的购买记录后按商品分组,要求去重后的用户数刚好为2,确保两个用户都至少买过一次
- 用符合要求的商品列表匹配原交易表,取出该商品对应的全部交易记录
可直接运行的查询语句
SELECT * FROM transactions WHERE item IN ( SELECT item FROM transactions WHERE customer_id IN (100, 101) GROUP BY item HAVING COUNT(DISTINCT customer_id) = 2 );
说明:这里用
COUNT(DISTINCT customer_id)是为了兼容同一用户多次购买同个商品的场景,避免统计次数虚高导致判断错误。
结果验证
针对提供的样例数据,执行上述语句后返回结果如下,完全符合需求:
transaction_id, item, customer_id 1, Computer, 100 2, Computer, 101
内容的提问来源于stack exchange,提问作者cpage
相关产品推荐
相关产品推荐

