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

Oracle中不使用GROUP BY子句,如何基于列值生成分组行号

解决方案:Oracle分组生成组内行号

你的需求是按ROOT字段分组,为每个分组内的CHILD生成连续递增的行号。不需要使用递归查询(你的原SQL误用了CONNECT BY,而你的数据本身不存在层级递归关系),直接用Oracle的分析函数ROW_NUMBER()即可实现:

SELECT 
    CHILD,
    ROOT,
    ROW_NUMBER() OVER (PARTITION BY ROOT ORDER BY CHILD) AS ROWNO
FROM my_data
ORDER BY ROOT, ROWNO;

代码说明:

  • PARTITION BY ROOT:将数据按ROOT字段拆分独立分组,每个分组单独计算行号
  • ORDER BY CHILD:指定分组内的排序规则,确保行号按CHILD的顺序生成(若需要其他排序逻辑,替换CHILD为目标字段即可)
  • 末尾的ORDER BY ROOT, ROWNO是为了让结果按ROOT分组展示,与你预期的输出格式完全匹配

执行以上SQL后,会得到你需要的结果:每个ROOT下的CHILD从1开始依次编号,分组内序号连续递增。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 20:03:14