从 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 函数,但无法弄清楚

这个逻辑呢?

  1. 您想要以某种方式对 3 行 A、B、C 进行排序,
  2. 在这些组中,排序很简单,然后是 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