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

如何在SQL中按区间拆分表并从各子表取1000行合并?

SQL实现按区间抽样后合并的方案

方法一:直接对应PySpark逻辑(适合少数量区间)

通过UNION ALL将每个区间的随机抽样结果合并,每个子查询单独过滤区间、随机排序后取前1000行:

SELECT *
FROM your_table
WHERE A > 1 AND A < 10
ORDER BY RAND()
LIMIT 1000

UNION ALL

SELECT *
FROM your_table
WHERE A > 10 AND A < 20
ORDER BY RAND()
LIMIT 1000;

注意:不同数据库的随机排序函数有差异:

  • MySQL/MariaDB 使用 RAND()
  • PostgreSQL 使用 RANDOM()
  • SQL Server 需用 ORDER BY NEWID()(RAND()在SQL Server中会为整个结果集生成单一随机值,无法实现行级随机排序)
  • Oracle 使用 ORDER BY DBMS_RANDOM.VALUE()

方法二:窗口函数分组抽样(适合多数量区间)

通过CASE WHEN标记行所属区间,再用ROW_NUMBER()窗口函数按区间分组随机排序,最后筛选每组前1000行,避免重复编写多个子查询:

SELECT t.*
FROM (
    SELECT *,
           -- 标记每行所属的区间组
           CASE
               WHEN A > 1 AND A < 10 THEN 'range_1_to_10'
               WHEN A > 10 AND A < 20 THEN 'range_10_to_20'
               -- 可在此继续添加更多区间规则
           END AS range_group,
           -- 按区间分组后随机排序,生成行号
           ROW_NUMBER() OVER (
               PARTITION BY CASE
                               WHEN A > 1 AND A < 10 THEN 'range_1_to_10'
                               WHEN A > 10 AND A < 20 THEN 'range_10_to_20'
                           END 
               ORDER BY RAND()
           ) AS row_num
    FROM your_table
) t
WHERE row_num <= 1000;

同样需根据使用的数据库替换对应的随机排序函数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 22:15:34