在Google BigQuery中如何筛选Name列唯一值对应的完整行?
解决BigQuery中筛选Name仅出现一次的完整行问题
没问题,我来帮你搞定这个BigQuery里的筛选需求!你需要保留所有列(不管实际有多少列),同时只选出那些Name值仅出现一次的完整行,这里有两种靠谱的方法:
方法一:使用窗口函数(推荐)
窗口函数可以在不分组的前提下,给每一行标记出对应Name的出现次数,然后直接筛选次数为1的行,写法简洁且适配任意列数:
SELECT * FROM ( SELECT *, -- 计算每个Name的出现次数,标记到每一行 COUNT(*) OVER (PARTITION BY Name) AS name_count FROM `your-project.your-dataset.your-table` -- 替换成你的表路径 ) WHERE name_count = 1
方法二:使用JOIN结合聚合查询
先通过聚合查询找出仅出现一次的Name,再和原表关联获取完整行:
SELECT t.* FROM `your-project.your-dataset.your-table` t JOIN ( -- 先筛选出仅出现一次的Name SELECT Name FROM `your-project.your-dataset.your-table` GROUP BY Name HAVING COUNT(*) = 1 ) unique_names ON t.Name = unique_names.Name
执行结果
两种方法都会返回你期望的结果:
| id | Name |
|---|---|
| 02 | Chad |
| 04 | Tim |
内容的提问来源于stack exchange,提问作者Olsgaard
相关产品推荐
相关产品推荐

