Google Big Query 中最近宣布的(期待已久的)窗口分析功能似乎非常不完整。下面是一个查询,它应该计算公司的几个(示例中为 3 个)财务指标的综合加权得分(这适用于 Oracle 和 MS SQL!):
select
( percent_rank() over (order by cash_discount desc)*0.4
+percent_rank() over (order by trailing_pe desc)*0.5
+percent_rank() over (order by forward_pe desc)*0.5
) combined_weighted_score
,company_symbol, company_name
from workspace.company c
在 GBQ 中我们得到:错误:在第 2 行遇到“”OVER”“over”。
我决定进一步研究这个问题 - 这是一个更简单的查询:
select
percent_rank() over (order by cash_discount desc) r1
,percent_rank() over (order by trailing_pe desc) r2
,percent_rank() over (order by forward_pe desc) r3
,company_symbol, company_name
from workspace.company c
这让我明白了:错误:尚不支持多个不同的 OVER 子句。如果查询中出现多个 OVER 子句,则它们必须相同。找到排序键不同的 AnalyticSpecs 0
所以,GBQ 似乎对解析窗口函数的实现非常不完整!接下来,我尝试了一些丑陋的技巧,例如:
select c.company_name, (r1.r*0.4+r2.r*0.5) combined_weighted_score
from [workspace.company] c
left join (select company_symbol, percent_rank() over (order by cash_discount desc) r from workspace.company) r1
on c.company_symbol=r1.company_symbol
left join (select company_symbol, percent_rank() over (order by trailing_pe desc) r from workspace.company) r2
on c.company_symbol=r2.company_symbol
好吧,仍然不起作用:
错误:5.1 - 0.0:一个查询不能有多个 JOIN 子句
有什么解决办法吗?我知道如果没有正确实现的窗口函数的帮助,这很难在经典 SQL 中实现。但是GBQ的公告听起来很有希望……