Google bigquery 使用group BY计算组的百分比

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中做到这一点的方法,有人知道吗 谢谢 您可以使用伪值作为键,对总数进行

我在一个数据集上做一个GROUP BY和COUNT*,我想计算每个组占总数的百分比

例如,在这个查询中,我想知道每个州的计数在publicdata:samples.natality:select总计数中所占的比例

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答案。感谢您提供简单的解决方案!