【发布时间】:2016-04-30 08:30:02
【问题描述】:
假设我有一些数据,例如:
grp v1 v2
--- -- --
2 5 7
2 4 9
3 10 2
3 11 1
我想创建独立于表顺序的新列 - 使两列具有独立的顺序,即按 v1 独立于 v2 排序,同时按 grp 分区。
结果(独立排序,按 grp 分区)将是:
grp v1 v2 v1_ordered v2_ordered
--- -- -- ---------- ----------
2 5 7 4 7
2 4 9 5 9
3 10 2 10 1
3 11 1 11 2
一种方法是创建两个表并进行交叉连接。但是,我正在处理太多的数据行,以至于计算上难以处理 - 有没有办法在没有 JOIN 的单个查询中做到这一点?
基本上,我想编写如下 SQL:
SELECT
*,
v1 OVER (PARTITION BY grp ORDER BY v1 ASC) as v1_ordered,
v2 OVER (PARTITION BY grp ORDER BY v2 ASC) as v2_ordered
FROM [example_table]
这打破了表格行的含义,但它是许多应用程序的必要功能 - 例如计算两个字段之间的有序相关性CORR(v1_ordered, v2_ordered).
这可能吗?
【问题讨论】:
标签: sql sorting google-bigquery window-functions database-partitioning