如何在Apache Derby查询中实现分组连续计数(Running Count)
在Apache Derby中实现分组内连续计数(Running Count)
你需求的是按Part1分组,每组内按Part2排序生成从1开始的连续序号,分组切换时重置计数,在Apache Derby中可以用纯SQL实现,分两种场景:
场景1:Derby版本≥10.12(支持窗口函数)
Derby 10.12及以上版本支持窗口函数,这是最简洁高效的实现方式:
SELECT Part1, Part2, ROW_NUMBER() OVER (PARTITION BY Part1 ORDER BY Part2) AS Rank FROM 你的表名;
PARTITION BY Part1:将数据按Part1分组,每个分组单独计算序号ORDER BY Part2:指定分组内的排序规则,确保序号按Part2顺序生成ROW_NUMBER():为每个分组内的行生成连续的序号,从1开始,分组变化时自动重置
场景2:Derby版本<10.12(不支持窗口函数)
如果使用的是更早的Derby版本,可以通过自连接实现:
SELECT t1.Part1, t1.Part2, COUNT(t2.Part2) AS Rank FROM 你的表名 t1 JOIN 你的表名 t2 ON t1.Part1 = t2.Part1 AND t2.Part2 <= t1.Part2 GROUP BY t1.Part1, t1.Part2 ORDER BY t1.Part1, t1.Part2;
这种方法通过自连接统计同一Part1分组中,Part2小于等于当前行Part2的行数,以此作为序号。注意:如果同一Part1分组内存在重复的Part2值,会导致序号重复,此时需要结合表中其他唯一字段(比如主键)来调整排序条件。
内容的提问来源于stack exchange,提问作者centic
相关产品推荐
相关产品推荐

