如何在HP Vertica中随机创建具有不同行数的组

  • 本文关键字:创建 HP Vertica 随机 sql vertica
  • 更新时间 :
  • 英文 :


我想从一个表中随机选择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)函数进行随机排序

最新更新