如何在SQL Server中为表的bit列按80-20概率随机赋值?
解决方案
要给表中RandomNumber(bit类型)列按80%为0、20%为1的比例随机赋值,这里提供两种实用的SQL实现方式:
方法1:固定数量更新(适配已知总记录数为10的场景)
先将所有记录的RandomNumber设为0,再随机挑选2条更新为1:
-- 第一步:将所有记录的RandomNumber设为0 UPDATE YourTableName SET RandomNumber = 0; -- 第二步:随机选2条设为1(SQL Server语法) UPDATE TOP(2) YourTableName SET RandomNumber = 1 ORDER BY NEWID();
如果是MySQL数据库,第二步可替换为:
UPDATE YourTableName SET RandomNumber = 1 ORDER BY RAND() LIMIT 2;
方法2:按比例动态分配(支持任意总记录数)
通过窗口函数对记录随机排序,再按20%的比例分配1,其余设为0:
WITH RankedRecords AS ( SELECT RandomNumber, ROW_NUMBER() OVER(ORDER BY NEWID()) AS RowNum, COUNT(*) OVER() AS TotalCount FROM YourTableName ) UPDATE RankedRecords SET RandomNumber = CASE WHEN RowNum <= TotalCount * 0.2 THEN 1 ELSE 0 END;
MySQL中可以用变量实现类似逻辑:
SET @row_num = 0; SET @total_count = (SELECT COUNT(*) FROM YourTableName); UPDATE YourTableName SET RandomNumber = CASE WHEN (@row_num := @row_num + 1) <= @total_count * 0.2 THEN 1 ELSE 0 END ORDER BY RAND();
示例结果
| Id | RandomNumber |
|---|---|
| 1 | 0 |
| 2 | 0 |
| 3 | 0 |
| 4 | 1 |
| 5 | 0 |
| 6 | 0 |
| 7 | 0 |
| 8 | 1 |
| 9 | 0 |
| 10 | 0 |
内容的提问来源于stack exchange,提问作者nasim_bbb
相关产品推荐
相关产品推荐

