BigQuery:除以列中值的总和以找到比率

Posted

技术标签:

【中文标题】BigQuery:除以列中值的总和以找到比率【英文标题】:BigQuery: Divided by sum of values in column to find the ratio 【发布时间】:2018-04-01 02:59:32 【问题描述】:

我有一个简单的表,有两列 Bin_name (int) 和 Count_in_this_bin (int)

我想将其转换为每个 bin 与所有 bin 中总计数的比率。

我在 Google BigQuery 中使用了以下查询:

SELECT count_in_bin/(SELECT SUM(count_in_bin) FROM [table])
FROM [table]

然后我得到

错误:查询失败 错误:SELECT 子句中不允许子选择

现在谁能告诉我在 BigQuery 中进行这种简单划分的正确方法?

【问题讨论】:

【参考方案1】:

BigQuery 旧版 SQL

#legacySQL
SELECT 
  count_in_bin, 
  RATIO_TO_REPORT(count_in_bin) OVER() AS ratio
FROM [project:dataset.table]

BigQuery 标准 SQL

#standardSQL
SELECT 
  count_in_bin, 
  count_in_bin / total AS ratio
FROM `project.dataset.table`, 
(SELECT SUM(count_in_bin) total FROM `project.dataset.table`)

【讨论】:

如果第一个表有连接,标准的sql方法仍然有效吗? 它应该 :o) 如果正确构造。尝试如果问题 - 发布新的单独问题,我们将提供帮助【参考方案2】:

您正在寻找窗口/分析函数。在标准 SQL 中,这将是:

SELECT count_in_bin / SUM(count_in_bin) OVER () 
FROM [table]

在旧版 SQL 中,您似乎需要一个子查询:

SELECT count_in_bin, count_in_bin / total_count_in_bin
FROM (SELECT count_in_bin, SUM(count_in_bin) OVER () as total_count_in_bin
      FROM [table]
     ) t

【讨论】:

您好,我试过了,但它显示:错误:解析表达式中缺少函数:1.50 - 1.57。这是旧的 sql 语法还是标准? 我刚刚再次尝试使用 StandardSQL 方言,它可以工作,但它不适用于旧语法。 @Noob。 . . .多奇怪。 sum(count_in_bin) over () 适用于旧版 SQL。抛开表达式的是除法。 嗨伙计,我使用的是旧版 SQL,查询本身有效,但当我将其包含在分区中时却没有。另外,在我检查了 BigQueyr 中的 Legacy Syntax 选项后,我发现 bigquery 中的标准 sql 实际上支持子查询。虽然对我来说最好的解决方案就是坚持使用 bigquery 中的标准 sql 选项。谢谢 是的,您提供的第二个版本有效,而第一个带有 SUM 的除法失败。我猜 BigQuery 可能希望查询更清晰?

以上是关于BigQuery:除以列中值的总和以找到比率的主要内容,如果未能解决你的问题,请参考以下文章

通过除以列的总和来查找列值

Big Query 或 SQL 重塑数据

如何使用 OVER() 函数获取列中值的总和?

PHP - 如何回显列中值的总和?

如何将列除以 Spark DataFrame 中的总和

在 R 中计算 big.matrix 的行总和?