如何在BigQuery中获取所有行均符合条件的唯一ID?
解决查询全满足条件唯一ID的SQL问题
你的原SQL语句存在逻辑错误,导致无法返回结果:count(columnB = false)的写法不对——columnB = false会返回布尔值,而count函数会统计所有非空的布尔值(不管结果是true还是false),所以只要该ID下有数据行,这个count值就大于0,=0的条件永远不成立,自然查不到任何结果。
以下是几种可行的正确写法:
方法一:用SUM统计false的数量
通过case语句将false转换为1、true转换为0,求和后等于0即表示没有false行:select columnA from table group by columnA having sum(case when columnB = false then 1 else 0 end) = 0方法二:用MAX判断是否存在false
如果存在false则MAX返回1,否则返回0,等于0即符合条件:select columnA from table group by columnA having max(case when columnB = false then 1 else 0 end) = 0方法三:排除法(适合大表优化)
先查出所有包含false的ID,再排除这些ID,剩下的就是全为true的ID:select distinct columnA from table where columnA not in ( select columnA from table where columnB = false )方法四:利用数据库特定聚合函数(如PostgreSQL)
部分数据库支持bool_or这类聚合函数,直接判断是否存在false,取反即可:select columnA from table group by columnA having not bool_or(columnB = false)
内容的提问来源于stack exchange,提问作者gmfrk8
相关产品推荐
相关产品推荐

