从 BigQuery 中的大量数据创建混合组
Create mixed groups from large amount of data in BigQuery
我有一个 table 数据如下:
Row Group Amount
1 Group A 20
… Group A 20
3000 Group A 20
3001 Group B 20
… Group B 20
6000 Group B 20
6001 Group C 20
… Group C 20
9000 Group C 20
我想订购这些数据,如下所示:
Row Group Amount
1 Group A 20
2 Group B 20
3 Group C 20
4 Group A 20
5 Group B 20
6 Group C 20
7 Group A 20
8 Group B 20
9 Group C 20
…
9000 GroupC 20
我该怎么做?
我在想也许可以使用 Windows 函数,但无法弄清楚
这个逻辑呢?
- 您想要以某种方式对 3 行 A、B、C 进行排序,
- 在这些组中,排序很简单,然后是 A,然后是 B,然后是 C
因此你想给每一行它应该属于的组数。
为此:
- 将每组(A、B 或 C)的行分开,
- 给每一行一个数字
- 排序该数字中的所有行,然后按组排序..
在 SQL 中给出:
SELECT
`Group`,
amount
FROM
`project.dataset.table`
ORDER BY
ROW_NUMBER() OVER(PARTITION BY `Group` ORDER BY ROW),
`Group`
使用一些示例数据 returns 确实:
进一步说明ROW_NUMBER
的效果:
SELECT
ROW_NUMBER() OVER(PARTITION BY `Group` ORDER BY ROW) AS new_row,
`Group`,
amount
FROM
sample
ORDER BY
ROW_NUMBER() OVER(PARTITION BY `Group` ORDER BY ROW),
`Group`
returns
我有一个 table 数据如下:
Row Group Amount
1 Group A 20
… Group A 20
3000 Group A 20
3001 Group B 20
… Group B 20
6000 Group B 20
6001 Group C 20
… Group C 20
9000 Group C 20
我想订购这些数据,如下所示:
Row Group Amount
1 Group A 20
2 Group B 20
3 Group C 20
4 Group A 20
5 Group B 20
6 Group C 20
7 Group A 20
8 Group B 20
9 Group C 20
…
9000 GroupC 20
我该怎么做? 我在想也许可以使用 Windows 函数,但无法弄清楚
这个逻辑呢?
- 您想要以某种方式对 3 行 A、B、C 进行排序,
- 在这些组中,排序很简单,然后是 A,然后是 B,然后是 C
因此你想给每一行它应该属于的组数。 为此:
- 将每组(A、B 或 C)的行分开,
- 给每一行一个数字
- 排序该数字中的所有行,然后按组排序..
在 SQL 中给出:
SELECT
`Group`,
amount
FROM
`project.dataset.table`
ORDER BY
ROW_NUMBER() OVER(PARTITION BY `Group` ORDER BY ROW),
`Group`
使用一些示例数据 returns 确实:
进一步说明ROW_NUMBER
的效果:
SELECT
ROW_NUMBER() OVER(PARTITION BY `Group` ORDER BY ROW) AS new_row,
`Group`,
amount
FROM
sample
ORDER BY
ROW_NUMBER() OVER(PARTITION BY `Group` ORDER BY ROW),
`Group`
returns