Google bigquery 使用group BY计算组的百分比
我在一个数据集上做一个GROUP BY和COUNT*,我想计算每个组占总数的百分比 例如,在这个查询中,我想知道每个州的计数在publicdata:samples.natality:select总计数中所占的比例Google bigquery 使用group BY计算组的百分比,google-bigquery,Google Bigquery,我在一个数据集上做一个GROUP BY和COUNT*,我想计算每个组占总数的百分比 例如,在这个查询中,我想知道每个州的计数在publicdata:samples.natality:select总计数中所占的比例 SELECT state, count(*) FROM [publicdata:samples.natality] GROUP by state 在SQL中有几种方法可以做到这一点,但我还没有找到在Bigquery中做到这一点的方法,有人知道吗 谢谢 您可以使用伪值作为键,对总数进行
SELECT state, count(*)
FROM [publicdata:samples.natality]
GROUP by state
在SQL中有几种方法可以做到这一点,但我还没有找到在Bigquery中做到这一点的方法,有人知道吗
谢谢 您可以使用伪值作为键,对总数进行自联接。例如:
SELECT
t1.state AS state,
t1.cnt AS cnt,
100 * t1.cnt / t2.total as percent
FROM (
SELECT
state,
COUNT(*) AS cnt,
1 AS key
FROM
[publicdata:samples.natality]
WHERE state is not null
GROUP BY
state) AS t1
JOIN (
SELECT
COUNT(*) AS total,
1 AS key
FROM
[publicdata:samples.natality]) AS t2
ON t1.key = t2.key
ORDER BY percent DESC
检查比率报告,最近发布的窗口功能之一:
SELECT state, ratio * 100 AS percent FROM (
SELECT state, count(*) AS total, RATIO_TO_REPORT(total) OVER() AS ratio
FROM [publicdata:samples.natality]
GROUP by state
)
state percent
AL 1.4201828131159113
AK 0.23521048665998198
AZ 1.3332896746620975
AR 0.7709591206172346
CA 10.008298605982642
修改Felipe对标准SQL BigQuery方言而不是传统SQL方言的回答如下所示:
select state, 100*(state_count / total) as pct
from (
SELECT state, count(*) AS state_count, sum(count(*)) OVER() AS total
FROM `bigquery-public-data.samples.natality`
GROUP by state
) s
标准SQL BigQuery聚合分析函数又名“窗口函数”的文档如下:
您可以使用窗口函数按组获取合计百分比,而无需子查询来改进evan_b的解决方案:
SELECT
state
,count(*) / (sum(count(*)) OVER()) as pct
FROM
`bigquery-public-data.samples.natality`
GROUP BY
state
Check ratio_to_report,最近发布的一个窗口功能示例,在回答中刚刚看到了昨天发布的带有新功能的帖子,这正是我想要的,谢谢!有没有一种方法可以使用ROUND和RATIO\u to\u报告?或者使用*100进行百分比计算?我在第1行第37列遇到了一个错误。我们期望:这是一个遗留函数,现在已弃用。不弃用,但标准SQL肯定是首选,也是前进的最佳方式。请参阅下面的evan_b答案。感谢您提供简单的解决方案!