我正在使用bigquery,并尝试根据分配给每个记录的“拆分”数量,为其分配分类值。
该表具有按str级别分组的累计记录计数,即,如果在2 str处有4个sku,则sku将被标记为1、2、3、4。每个str都分配了一个split值,因此如果str的split值为2,我希望它将sku分为2个类别。我想创建另一列,将标记为1-2的SKU指定为“1”,将标记为3-4的SKU指定为“2”(实际数据的规模要大得多,但我认为这会更容易。)
+-----+------+---------------+--------+
| STR | SKU | SKU_ROW_COUNT | SPLITS |
+-----+------+---------------+--------+
| 1 | 1230 | 1 | 3 |
| 1 | 1231 | 2 | 3 |
| 1 | 1232 | 3 | 3 |
| 1 | 1233 | 4 | 3 |
| 1 | 1234 | 5 | 3 |
| 1 | 1235 | 6 | 3 |
| 2 | 1310 | 1 | 2 |
| 2 | 1311 | 2 | 2 |
| 2 | 1312 | 3 | 2 |
| 2 | 1313 | 4 | 2 |
| 3 | 2345 | 1 | 1 |
| 3 | 2346 | 2 | 1 |
| 3 | 2347 | 3 | 1 |
+-----+------+---------------+--------+
splits列是动态的,范围从1到3。每个类别中的SKU数量应该相对相等,但这并不像创建的组数量那样重要。理想情况下,包含新列(主机号)的最终表如下所示:
+-----+------+---------------+--------+-------------+
| STR | SKU | SKU_ROW_COUNT | SPLITS | HOST_NUMBER |
+-----+------+---------------+--------+-------------+
| 1 | 1230 | 1 | 3 | 1 |
| 1 | 1231 | 2 | 3 | 1 |
| 1 | 1232 | 3 | 3 | 2 |
| 1 | 1233 | 4 | 3 | 2 |
| 1 | 1234 | 5 | 3 | 3 |
| 1 | 1235 | 6 | 3 | 3 |
| 2 | 1310 | 1 | 2 | 1 |
| 2 | 1311 | 2 | 2 | 1 |
| 2 | 1312 | 3 | 2 | 2 |
| 2 | 1313 | 4 | 2 | 2 |
| 3 | 2345 | 1 | 1 | 1 |
| 3 | 2346 | 2 | 1 | 1 |
| 3 | 2347 | 3 | 1 | 1 |
+-----+------+---------------+--------+-------------+
3条答案
按热度按时间lsmd5eda1#
可以使用窗口函数和算术:
事实上,
ntile()
似乎做了你想做的-你甚至不需要sku_row_count
列(基本上模仿row_number()
无论如何):xqnpmsa82#
如果组中值的顺序无关紧要,只需使用模运算:
quhf5bfb3#
下面是bigquery标准sql