如何用T-SQL筛选全部购买产品均为laptop的客户记录
T-SQL 实现筛选全部购买产品为laptop的客户
首先假设你的表名为CustomerPurchases,包含字段CustomerName(客户姓名)、Product(购买产品),以下是几种常用实现方案:
方案1:分组聚合判断(最简写法)
利用分组后聚合值的特性判断,逻辑简洁执行效率高:
SELECT CustomerName FROM CustomerPurchases GROUP BY CustomerName HAVING MIN(Product) = 'laptop' AND MAX(Product) = 'laptop'
逻辑说明:如果客户所有购买记录的产品都是laptop,那么分组后该客户的产品最小值、最大值均为laptop;只要存在其他产品,两个值必然有一个不等于laptop,直接被过滤。
方案2:NOT EXISTS 排除法(逻辑最直观)
直接排除存在非laptop购买记录的客户,适合表有CustomerName+Product联合索引的场景,性能表现优异:
SELECT DISTINCT CustomerName FROM CustomerPurchases c1 WHERE NOT EXISTS ( SELECT 1 FROM CustomerPurchases c2 WHERE c2.CustomerName = c1.CustomerName AND c2.Product <> 'laptop' )
方案3:带计数统计的实现
如果需要同步返回该客户购买laptop的总次数,可以用条件计数实现:
SELECT CustomerName, COUNT(*) AS LaptopPurchaseTimes FROM CustomerPurchases GROUP BY CustomerName -- 统计非laptop的购买记录数为0,即所有购买都是laptop HAVING COUNT(CASE WHEN Product <> 'laptop' THEN 1 END) = 0
内容的提问来源于stack exchange,提问作者Kara
相关产品推荐
相关产品推荐

