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:除以列中值的总和以找到比率的主要内容,如果未能解决你的问题,请参考以下文章