2015-10-19 73 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 
相關問題