我尝试使用布尔列进行分区,我也用它来分组。该列是应用函数的结果,而不是有机列。
使用Legacy-SQL,这可以使用partition by子句中的列名。在标准SQL中,无法使用列名,并且在重写列定义时会出现错误。
#standardSQL
SELECT
corpus = 'sonnets' sonnetsCorp,
count(distinct word) cnt,
count(distinct word)/sum(count(distinct word)) over (partition by corpus = 'sonnets') ratio
FROM `bigquery-public-data.samples.shakespeare`
group by 1
我收到错误:
Unrecognized name: sonnetsCorp at [5:68]
答案 0 :(得分:2)
该列是应用函数的结果,而不是有机列。
下面是在BigQuery Standard SQL中表达此案例(派生列)的简单方法,因此使用旧版SQL编写的查询几乎可以保留(不引入额外的子查询)
#standardSQL
SELECT
sonnetsCorp,
COUNT(DISTINCT word) cnt,
COUNT(DISTINCT word)/SUM(COUNT(DISTINCT word)) OVER (PARTITION BY sonnetsCorp) ratio
FROM `bigquery-public-data.samples.shakespeare`, UNNEST([corpus = 'sonnets']) AS sonnetsCorp
GROUP BY sonnetsCorp
以上, UNNEST([corpus = 'sonnets']) AS sonnetsCorp
看起来像交叉连接,但实际上它只是基于每行计算的派生列!
使用Legacy-SQL,这可以使用分区依据
中的列名
与此同时,我觉得在您的问题中,您提出了一个您在Legacy SQL中实际使用的查询。你可能会过度简化"它是为了显示您的派生列的问题 - 在这种情况下忽略下面。但是,如果这个查询正是你所使用的 - 它没有多大意义,而且下面的查询完全相同
#standardSQL
SELECT
corpus = 'sonnets' AS sonnetsCorp,
COUNT(DISTINCT word) cnt
FROM `bigquery-public-data.samples.shakespeare`
GROUP BY sonnetsCorp
你构建比率字段的方式使它总是等于1!
答案 1 :(得分:1)
您需要使用带有标准SQL的子查询。旧版SQL支持一些非标准功能,这些功能在极端情况下会出现故障。
$(document).ready(function() {
$("#parentDiv .childLine")[$("#parentDiv .childLine").length-1].style = "display:none";
});