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

Oracle:如何实现LISTAGG()结果的自动批量分页聚合?

自动批量聚合UUID的解决方案

可以用窗口函数+分组聚合实现自动分批,无需手动调整OFFSET,也不需要创建任何数据库对象。核心思路是先给去重后的UUID分配批次编号,再按批次分组执行LISTAGG聚合:

WITH active_uuids AS (
  SELECT DISTINCT
    uuid,
    -- 每99个UUID分为一个批次,生成批次编号
    FLOOR((ROW_NUMBER() OVER (ORDER BY uuid) - 1) / 99) AS batch_num
  FROM
    table_with_uuids
  -- 这里添加你的WHERE条件
)
SELECT
  batch_num + 1 AS "Batch", -- 批次号从1开始显示
  COUNT(uuid) AS "Entries",
  '( ' || LISTAGG('''' || uuid || '''', ', ' ON OVERFLOW ERROR) || ' )' AS "UUIDs"
FROM
  active_uuids
GROUP BY
  batch_num
ORDER BY
  batch_num;

关键说明:

  • ROW_NUMBER() OVER (ORDER BY uuid):给每个去重后的UUID生成唯一序号,按UUID排序保证分组稳定。
  • FLOOR((ROW_NUMBER() - 1) / 99):将序号转换为批次号,每99个UUID归为同一批次(适配你提到的100个会溢出的阈值)。
  • 最终按批次号分组聚合,每个批次生成一个包含最多99个带引号UUID的字符串,避免LISTAGG溢出。

这个方案会一次性返回所有批次的聚合结果,每个批次对应一行数据,无需手动分页执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 09:27:09