【发布时间】:2014-08-06 19:29:17
【问题描述】:
我希望能够在 BigQuery 中按分区进行一些计算,然后为每个分区只输出 1 行(而不是为每个分区输出一行)。例如,如果我有这样的表:
Category | Location | Count
A | 'home' | 20
A | 'work' | 10
A | 'lab' | 6
B | 'home' | 5
C | 'lab' | 15
C | 'home' | 25
我希望得到这个结果
Category | TopLocation | TopCount | SecondLocation | SecondCount
A | 'home' | 20 | 'work' | 10
B | 'home' | 5 | NULL | NULL
C | 'home' | 25 | 'lab' | 15
我认为我可以使用分区来执行此操作,但这最终会为每个值生成一行,而不是我想要的单行,因此我然后按类别分组并使用 FIRST。有没有更好的方法来避免生成如此多的中间行(并希望避免窗口函数的“大结果”问题)。
SELECT
category,
FIRST(TopLocation) TopLocation,
FIRST(TopCount) TopCount,
FIRST(SecondLocation) SecondLocation,
FIRST(SecondCount) SecondCount,
FROM
(SELECT
category,
NTH_VALUE(Location, 1) OVER (PARTITION BY category ORDER BY count) TopLocation,
NTH_VALUE(Count, 1) OVER (PARTITION BY category ORDER BY count) TopCount,
NTH_VALUE(Location, 2) OVER (PARTITION BY category ORDER BY count) SecondLocation,
NTH_VALUE(Count, 1) OVER (PARTITION BY category ORDER BY count) SecondCount
FROM
mytable
)
GROUP BY
category
ORDER BY
category DESC
【问题讨论】:
标签: sql google-bigquery