如何在BigQuery SQL中判断分组内是否存在特定值
SQL分组判断逻辑实现
原始数据集
ID|Date_Val|Data 1|2022-01-01|A 1|2022-01-01|I 1|2022-01-01|H 2|2022-01-01|G 2|2022-01-01|G 2|2022-01-01|I
目标查询框架
SELECT ID, Date_Val, IF(/logic here/, 'A', 'B') AS Data FROM your_table -- 替换为实际表名 GROUP BY 1,2
期望输出
ID|Date_Val|Data 1|2022-01-01|A 2|2022-01-01|B
解决方案
要实现「分组后若组内存在任意Data='A'则返回'A',否则返回'B'」的逻辑,可使用以下几种兼容多数SQL数据库的写法替换/logic here/:
方法1:统计'A'的出现次数(通用写法)
这是几乎所有SQL数据库都支持的标准写法:
SUM(CASE WHEN Data = 'A' THEN 1 ELSE 0 END) > 0
完整查询语句:
SELECT ID, Date_Val, IF(SUM(CASE WHEN Data = 'A' THEN 1 ELSE 0 END) > 0, 'A', 'B') AS Data FROM your_table GROUP BY 1,2
逻辑说明:统计每组中Data='A'的记录数,若数量大于0则判定组内存在'A'。
方法2:判断是否存在'A'标记
通过MAX函数捕获组内是否有'A',也是通用写法:
MAX(CASE WHEN Data = 'A' THEN 'A' ELSE NULL END) IS NOT NULL
完整查询语句:
SELECT ID, Date_Val, IF(MAX(CASE WHEN Data = 'A' THEN 'A' ELSE NULL END) IS NOT NULL, 'A', 'B') AS Data FROM your_table GROUP BY 1,2
逻辑说明:若组内有'A',MAX函数会返回'A';否则返回NULL,通过判断非空确定结果。
方法3:简化写法(仅支持部分数据库)
如果使用Google BigQuery、PostgreSQL 12+等支持COUNTIF函数的数据库,可直接简化为:
COUNTIF(Data = 'A') > 0
内容的提问来源于stack exchange,提问作者asdasd32
相关产品推荐
相关产品推荐

