2015-10-19 72 views
0

我想从表中随机选择具有不同行数的4组数据,并生成一个新的group_name列。如何在HP Vertica中随机创建具有不同行数的组

例如,如果原始表(含有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

那么参数是每组的行数?行数与组的总数相同? –

+0

@JuanCarlosOropeza是的,唯一的参数是每个组的行数。我更新了这个问题,以便更容易理解。 – xyin

回答

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 

如果你想更随意,你可以在row_number() over (order by random)函数创建一个random列和顺序随机

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 
相关问题