SQL大查询脚本问题

问题描述

您能帮我吗,我不明白我的问题在哪里。我尝试了几件事,但未能得出正确的结论。

SELECT 
CONCAT(fullvisitorId,"-",CAST(visitstarttime AS STRING)) as session,RANK() OVER(PARTITION BY CONCAT(fullvisitorId,CAST(visitstarttime AS STRING)) ORDER BY hitNumber ASC) AS Rank,(SELECT MAX(cd.value) FROM hits.customDimensions as cd where cd.index = 12) as cd1,(SELECT cd.value FROM hits.customDimensions as cd where cd.index=29) as division,hits.hitnumber

FROM 
  `dl-training-bigquery.NDA_CHAN*******51.ga_sessions_20191202` as session,unnest(hits) as hits
  
WHERE division = 'fsh'
ORDER BY hitnumber ASC

enter image description here

解决方法

division似乎是select中定义的列别名。

这在SQL中是不允许的(通常不只是BigQuery)。使用子查询或CTE来定义division。然后过滤外部查询。

,

您不能在同一作用域(分开SELECT子句)中重复使用ORDER BY子句中定义的列。在这里,最简单的方法可能是将子查询移至FROM子句:

SELECT 
    CONCAT(fullvisitorId,"-",CAST(visitstarttime AS STRING)) as session,RANK() OVER(PARTITION BY fullvisitorId,visitstarttime ORDER BY hitNumber) as rank,dim1.cd1,dim2.division,hits.hitnumber
FROM `dl-training-bigquery.NDA_CHAN*******51.ga_sessions_20191202` as session
CROSS JOIN unnest(hits) as hits
CROSS JOIN (SELECT MAX(cd.value) as cd1 FROM hits.customDimensions as cd where cd.index = 12) as dim1
CROSS JOIN (SELECT cd.value as division FROM hits.customDimensions as cd where cd.index = 29) as dim2  
WHERE dim2.division = 'fsh'
ORDER BY hitnumber ASC

请注意,我简化了window函数的PARTITION BY子句:我认为您不需要在这里进行字符串连接,只需使用两级分区即可。

我还将隐式联接更改为显式cross join。在我看来,这不会改变逻辑,但是可以使意图更加清晰。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...