我想从表中随机选择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中执行此操作,而不是逐步执行随机选择?
谢谢!
答案 0 :(得分:1)
你可以这样做:
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
答案 1 :(得分:0)
您应该使用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)
函数