我想从一个表中随机选择4组具有不同行数的数据,并生成一个新列group_name。
例如,如果原始表(包含10000行)是这样的:
ID
---
ID1
ID2
...
我想要的结果表(包含2750行)如下所示:
ID GROUP
--- -----
ID1 1
ID2 3
... ...
每个组的行数如下所示:
group1 1000 rows
group2 1000 rows
group3 500 rows
group4 250 rows
这些随机生成的组不应该有任何重叠的行。
是否有办法做到这一点在Vertica在一次,而不是做随机选择一步一步?
谢谢!
你可以这样做:
SELECT ID, randomint(4)+1 as GROUP
FROM mytable
ORDER BY random()
LIMIT 2750
尽管您可能希望将其塞进本地临时文件中以对其进行总结,因为分组和选择在每次执行时都会更改。
另一个想法,如果你想保持一致的分组可能是使用HASH()与mod而不是纯粹的随机。这将在每个查询中创建相同的GROUP值。
SELECT ID, (HASH(ID) % 4)+1 as GROUP
FROM mytable
ORDER BY random()
LIMIT 2750
您应该使用row_number
和使用CTE
WITH cte AS (
SELECT ID, row_number() over () as RN
FROM YourTable
)
SELECT ID,
CASE
WHEN rn <= 1000 then 1
WHEN rn <= 2000 then 2
WHEN rn <= 2500 then 3
WHEN rn <= 2750 then 4
END as GROUP
FROM cte
WHERE rn <= 2750
如果你想要更多的随机,你可以创建一个random
列,并对row_number() over (order by random)
函数进行随机排序