当单条条件匹配时排除整个分组的SQL实现方法
解决方案
你的问题核心是要排除所有包含productId=6524的Store分组,而非仅删除分组内的单条记录。之前的HAVING productId <> 6524写法无效,是因为GROUP BY后该条件仅针对分组内的单个值判断,无法过滤整个分组。以下是几种可行的实现方式:
方法一:GROUP BY + HAVING 结合聚合函数
通过聚合函数统计分组内是否存在productId=6524的记录,筛选出统计数为0的分组:
SELECT Store FROM 你的表名 GROUP BY Store HAVING COUNT(CASE WHEN productId = 6524 THEN 1 END) = 0;
也可以用MAX函数判断:
SELECT Store FROM 你的表名 GROUP BY Store HAVING MAX(CASE WHEN productId = 6524 THEN 1 ELSE 0 END) = 0;
方法二:子查询排除法
先找出所有包含productId=6524的Store,再从原表中排除这些Store:
SELECT DISTINCT Store FROM 你的表名 WHERE Store NOT IN ( SELECT Store FROM 你的表名 WHERE productId = 6524 );
方法三:LEFT JOIN 过滤法
通过左连接匹配存在productId=6524的Store,筛选出匹配失败的记录:
SELECT DISTINCT t1.Store FROM 你的表名 t1 LEFT JOIN 你的表名 t2 ON t1.Store = t2.Store AND t2.productId = 6524 WHERE t2.Store IS NULL;
上述三种方法均能得到预期结果:Test 2、Test 3。
内容的提问来源于stack exchange,提问作者jcoke
相关产品推荐
相关产品推荐

