--- ---概要
我有三列:[visitorID],[rank],[numbers]。
在BigQuery中, 我想创建一个新列[计算], 这是[数字]和[计算]本身的总和的一部分,包括指定的条件。
我现在遇到的问题是“在BigQuery中,我无法创建需要计算的列,包括我正在创建的列”。 我不确定我的概念或想法是否合适, 我希望有更好的建议。
--- ---详细
*我有表:
包含三列的表:[visitorID],[rank],[numbers]。
*我需要创建的新列:
需要创建[计算]列。
*计算的定义:
按[visitorID]和[rank]排序后, [计算]是
(i)如果[数字] = 0,那么[计算] = 0 (ii)如果[数字]<> 0,那么总结当前[数字]值和先前的[计算]数字。 (iii)基于(ii),如果总和大于30,则[计算] = 0,ELSE [计算]保持相同的总和值。
*我遇到的问题
我需要使用BigQuery来进行这种计算。 然而,我想出的是“窗口和函数”,这似乎不是一个很好的解决方案。 我认为关键点在于“在BigQuery中,我无法创建需要计算的列,包括我正在创建的列”。
也就是说,我总是需要现有的值来创建一个新列。 我的示例查询如下,这无法解决问题。 您还可以看到打印屏幕以了解问题所在。
请参阅以下示例查询。
SELECT
visitorID,
rank,
numbers,
SUM(numbers) OVER (PARTITION BY visitorID ORDER BY rank) AS window_sum_current,
SUM(numbers) OVER (PARTITION BY visitorID ORDER BY rank ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS window_sum_prec1
FROM sample_table
*寻求建议
我想征求意见。 (1)在BigQuery中,这个问题是否可以解决? (2)我缺少什么方法或概念? (3)在BigQuery中解决问题的更好方法是什么?
非常感谢。
答案 0 :(得分:1)
对于BigQuery,到目前为止我能提出的唯一解决方案如下 它产生的结果恰好是您期望的价格,您可以了解BigQuery User-Defined Functions。如果使用得当,功能非常强大。在某些情况下,它有内存问题,很快就会按this link解决 我强烈建议采用此功能!
[ 486 173]
答案 1 :(得分:0)
What you are trying to do is not possible inside a SQL Select statement. Your asking to do something that is going to inherently require variables, loops, and if statements, none of which are available to you inside a SQL Select statement.
Granted, you can do this sort of thing inside SQL code using table valued functions and stored procedures.. Using an outside programming language that was built for exactly what you want to do is likely going to be the easiest route for you.
Run your query for [visitorID], [rank], [numbers] inside SQL, and then just develop the [calculation] data as you output to whatever file or screen you need to.
Hope it clarifies your situation.