如何在Snowflake/MySQL中按组分配1-3的均等随机数?
解决方案:分组内均等分配1-3的随机数
核心思路:先对每个分组内的行随机打乱顺序,再用分桶函数将每组均分为3个部分,每个部分对应1、2、3,保证数值分布尽可能均等。
Snowflake 实现
SELECT Roll_number, Col1, NTILE(3) OVER (PARTITION BY Col1 ORDER BY RANDOM()) AS Random_Number FROM your_table_name ORDER BY Col1, Random_Number;
MySQL 实现(8.0+ 版本支持窗口函数)
SELECT Roll_number, Col1, NTILE(3) OVER (PARTITION BY Col1 ORDER BY RAND()) AS Random_Number FROM your_table_name ORDER BY Col1, Random_Number;
关键说明
- 随机排序:通过
RANDOM()(Snowflake)或RAND()(MySQL)在分组内随机打乱行的顺序,确保每次分配的结果具有随机性 - 均等分桶:
NTILE(3)会自动将每个分组的行划分为3个桶,当分组内总行数无法被3整除时,前N个桶(N为余数)会比其他桶多1行,保证各数值的数量差异不超过1,实现最接近均等的分布 - 以你的示例为例:分组A共8行,会生成3个1、3个2、2个3;分组B共4行,会生成2个1、1个2、1个3,完全符合均等要求
内容的提问来源于stack exchange,提问作者Gravity Boy
相关产品推荐
相关产品推荐

