You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL如何按表中指定列取值选取等量的随机行

实现方案

思路说明

首先统计Col2列中0和1各自的行数,取两者的较小值作为两个分组的统一抽取行数,之后分别从0、1两个分组中随机抽取对应数量的行合并返回即可。如果需要直接修改原表删除多余行,只要标记出超出抽取数的随机行执行删除即可。

以你给出的示例表为例:Col2为1的行共2条,为0的行共3条,取最小值2,最终从0分组随机抽2行、1分组抽全部2行,刚好得到4条0和1数量相等的结果,和参考结果逻辑一致。

随机查询实现(不修改原表)

以常用的MySQL语法为例:

-- 计算0和1的最小行数
SET @min_count = (
    SELECT MIN(group_count)
    FROM (
        SELECT COUNT(*) AS group_count FROM your_table_name GROUP BY Col2
    ) AS group_stats
);

-- 分别随机抽取后合并结果
(SELECT * FROM your_table_name WHERE Col2 = 0 ORDER BY RAND() LIMIT @min_count)
UNION ALL
(SELECT * FROM your_table_name WHERE Col2 = 1 ORDER BY RAND() LIMIT @min_count);

不同数据库仅随机排序语法有差异:PostgreSQL替换RAND()为RANDOM(),SQL Server替换为NEWID()即可。

直接删除原表多余行实现

确认要修改原表的情况下,直接删除行数更多的分组中超出最小行数的随机行即可,以MySQL为例:

-- 先确定哪个分组行数更多,这里示例是0分组行数更多
DELETE FROM your_table_name
WHERE Col2 = 0
ORDER BY RAND()
LIMIT (
    SELECT COUNT(*) - @min_count FROM your_table_name WHERE Col2 = 0
);

如果1分组行数更多,将WHERE条件中的Col2值改为1即可。

内容的提问来源于stack exchange,提问作者Mohsin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 16:54:03