SQL与BigQuery入门者求助:如何在BigQuery中统计列的计数?
解决BigQuery中统计WhitelistNames计数的问题
嘿,作为SQL和BigQuery入门用户,我先帮你拆解下现有查询的作用,再一步步实现你要的需求~
先搞懂现有查询做了什么
你现在的SQL是先通过子查询对bridgeToken和appName分组去重(确保每个token下的appName不重复),然后外层按bridgeToken统计每个token对应的appName数量,得到的是每个bridgeToken拥有的白名单应用数,结果里的WhitelistNames就是这个数值。
实现统计WhitelistNames的计数需求
你要的是统计「不同的WhitelistNames值分别出现了多少次」——也就是有多少个bridgeToken对应5个白名单应用,多少个对应13个,对吧?只需要在现有查询外层再套一层聚合分组就可以了,这里我用更易读的CTE(公共表表达式)来改写,适合入门理解:
WITH token_app_counts AS ( -- 第一步:去重每个bridgeToken对应的appName SELECT bridgeToken, appName FROM `DB` GROUP BY bridgeToken, appName ), whitelist_per_token AS ( -- 第二步:计算每个bridgeToken的白名单应用数 SELECT COUNT(appName) AS WhitelistNames, bridgeToken FROM token_app_counts GROUP BY bridgeToken ) -- 第三步:统计每个WhitelistNames对应的bridgeToken数量 SELECT WhitelistNames, COUNT(bridgeToken) AS count_of_bridgeTokens FROM whitelist_per_token GROUP BY WhitelistNames ORDER BY count_of_bridgeTokens DESC;
结果示例
如果你的原始结果是:
Row bridgeToken WhitelistNames
1 11111 5
2 22222 13
3 33333 5
4 44444 5
那新查询会返回:
| WhitelistNames | count_of_bridgeTokens |
|---|---|
| 5 | 3 |
| 13 | 1 |
这样你就能清楚看到,有3个bridgeToken对应5个白名单应用,1个对应13个啦~
顺便提一句:BigQuery标准SQL里推荐用反引号`包裹表名,而不是方括号[],所以我把你的[DB]改成了`DB`,如果你的表在特定数据集里,记得写成`dataset_name.DB`哦~
内容的提问来源于stack exchange,提问作者mzichao
相关产品推荐
相关产品推荐

