咨询COUNT(*)=1在指定SQL关联查询中的作用与含义
关于SQL中HAVING COUNT(*) = 1的作用解析
先提一句:你的SQL里WHERE子句存在语法问题(缺少闭合括号),不过不影响理解核心逻辑。
GROUP BY在这里的行为
你把SELECT语句里的所有字段都放进了GROUP BY子句,这意味着SQL会将所有选中字段值完全一致的行归为同一个分组。比如连接后有两行,AL1.ACCOUNTING_PERIOD、AL1.BUSINESS_AREA等所有字段的值完全相同,这两行会被合并成一个分组。
HAVING COUNT(*) = 1的具体作用
COUNT(*)统计的是每个分组内包含的原始行数。HAVING COUNT(*) = 1的作用就是只保留那些分组里仅包含1条原始数据的分组,过滤掉所有分组内行数≥2的结果。
换句话说,最终返回的都是这类数据:在两个表连接后,不存在任何其他与它所有选中字段完全重复的行。如果某条行有重复(哪怕只重复一次),都会因为分组后COUNT(*)≥2被过滤掉。
和不加HAVING的区别
不加HAVING时,不管每个分组里有多少行,都会被返回。比如有一个分组由3条完全重复的行组成,不加HAVING会返回这个分组(显示一条,因为GROUP BY合并了重复行),但加了HAVING COUNT(*) =1后,这个分组会被排除,不会出现在结果里。
内容的提问来源于stack exchange,提问作者Yasmine
相关产品推荐
相关产品推荐

