使用SQL条件逻辑筛选仅含状态'f'的门店查询问题
原SQL错误原因
- 过滤条件逻辑错误:仅包含
status='f'的门店,按你的子查询计算规则,总和等于该门店的总记录数,比如只有1条f记录的门店sum结果为1,你写的SUM(status) > 1会把这类符合要求的门店直接过滤。 - 别名冲突:子查询中计算列的别名
status和原表字段重名,容易引发语义歧义。
可行解决方案
方案1:直接分组统计(最简洁)
统计每个门店下status='t'的记录数,为0则符合要求:
SELECT store, 'f' AS status FROM your_table GROUP BY store HAVING COUNT(CASE WHEN status = 't' THEN 1 END) = 0
方案2:修正你原有逻辑的版本
调整HAVING过滤条件即可得到正确结果:
SELECT store, 'f' AS status FROM ( SELECT store, CASE WHEN status = 'f' THEN 1 WHEN status = 't' THEN -1 END AS status_flag FROM your_table) AS t GROUP BY store HAVING SUM(status_flag) = COUNT(*)
方案3:NOT EXISTS 写法(逻辑最直观)
筛选有f记录且没有同门店t记录的门店:
SELECT DISTINCT store, 'f' AS status FROM your_table t1 WHERE status = 'f' AND NOT EXISTS ( SELECT 1 FROM your_table t2 WHERE t2.store = t1.store AND t2.status = 't' )
内容的提问来源于stack exchange,提问作者tlqn
相关产品推荐
相关产品推荐

