请求编写Oracle SQL实现有序唯一数值分块并获取各块最值
Oracle SQL实现按固定行数拆分数据并获取块内最值
要将已排序的唯一数值按每25000条拆分,并获取每个块的最小、最大值,可借助Oracle的窗口函数和分组聚合实现:
核心SQL代码
WITH sorted_data AS ( SELECT unique_num, ROW_NUMBER() OVER (ORDER BY unique_num) AS rn FROM ( -- 替换为你的原始查询,需返回已排序的唯一数值列 SELECT DISTINCT target_column AS unique_num FROM your_table ORDER BY target_column ) raw_data ) SELECT CEIL(rn / 25000) AS Chunk, MIN(unique_num) AS Min, MAX(unique_num) AS Max FROM sorted_data GROUP BY CEIL(rn / 25000) ORDER BY Chunk;
代码说明
- sorted_data公共表表达式:先通过子查询获取你需要的唯一排序数值,再用
ROW_NUMBER()给每条数据按排序顺序分配连续序号,确保每一行有对应的位置标记。 - 主查询逻辑:
- 用
CEIL(rn / 25000)计算每条数据所属的块编号,每25000条为一个块,最后不足25000条的自动归入最后一块。 - 按块编号分组后,用
MIN()和MAX()分别提取每个块的最小和最大值,最后按块号升序排列结果。
- 用
示例验证
当你的数据是1到110000的连续唯一数值时,执行上述查询会得到如下结果:
| Chunk | Min | Max |
|---|---|---|
| 1 | 1 | 25000 |
| 2 | 25001 | 50000 |
| 3 | 50001 | 75000 |
| 4 | 75001 | 100000 |
| 5 | 100001 | 110000 |
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

