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

如何从SQL表中获取各不同值数量均等的均匀样本?

如何按value分组获取均匀分布的样本?

针对你这种某类取值占比过高的表,要实现每个不同value各取2条数据的均匀样本,用窗口函数就能轻松解决,直接上SQL:

SELECT id, value
FROM (
    SELECT 
        id, 
        value,
        -- 按value分组,每组内给行编号
        ROW_NUMBER() OVER (PARTITION BY value ORDER BY id) AS row_num
    FROM your_table -- 替换成你的实际表名
) AS ranked_data
WHERE row_num <= 2;

原理说明:

  • PARTITION BY value会把表按value拆分成独立分组,比如value=3、4、5各成一组;
  • ROW_NUMBER()给每个分组里的行按指定规则(这里是ORDER BY id)编上连续序号;
  • 最后筛选row_num <= 2,就能保证每个value分组只保留前2条记录,彻底避开单一取值主导样本的问题。

如果不想按id顺序取,想要随机抽取每组的2条,把排序规则换成随机函数即可:

  • MySQL 用 ORDER BY RAND()
  • PostgreSQL 用 ORDER BY RANDOM()

示例SQL(以MySQL为例):

SELECT id, value
FROM (
    SELECT 
        id, 
        value,
        ROW_NUMBER() OVER (PARTITION BY value ORDER BY RAND()) AS row_num
    FROM your_table
) AS ranked_data
WHERE row_num <= 2;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 06:45:28