Google Big Query中最近宣佈的(並且期待已久的)窗口分析函數似乎非常不完整。下面是應該計算(在本例中3)的幾種組合的加權分數財務指標公司(這部作品在Oracle和MS SQL!)查詢:Google Big Query(GBQ)中窗口函數的不完整實現所需的解決方法
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
在吉貝我們得到:錯誤:遇到「‘OVER’」過‘’在第2行
我決定進一步研究這個問題 - 這裏是一個更簡單的查詢:
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子句,則它們必須相同。發現分類規格在分類密鑰方面有所不同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的宣佈聽起來很有希望......
Fh的感謝!解決方法是有效的,但是這種不必要的嵌套連接不會贏得任何選美比賽:-)我仍然希望GBQ團隊監控他們的客戶的痛苦,並且至少在下一個版本中: 1.刪除限制只有一個在同一個SELECT中輸入OVER子句 2.認識到像0.4 *(percent_rank()over(...))這樣的表達式完全合法謝謝解決方法。我仍然希望GBQ團隊監測他們客戶的痛苦,至少會這樣做: – user2264178
據我所知 - GBQ團隊喜歡他們的用戶。感謝您的反饋,並保持它來:)。 –