Oracle分析函数分区:自定义分支分组统计账户数的实现方法
Oracle分析函数自定义分组统计方案
核心结论
PARTITION BY子句不支持直接写入where类的过滤条件,它仅接受用于分组的表达式,你之前的写法属于语法错误,所以会报错。
实现自定义分组的具体方法
通过构造自定义分组键,将branch_id 1、2划分为同一组,3、4划分为另一组,再基于这个分组键做分区统计,有两种常用实现方式:
方式1:CASE表达式(通用SQL语法)
select branch_id, account_id, -- 生成分组标识:1、2归为GROUP_1_2,其余归为GROUP_3_4 count(account_id) over (partition by case when branch_id <= 2 then 'GROUP_1_2' else 'GROUP_3_4' end ) as group_total_accounts from account;
方式2:DECODE函数(Oracle专属简洁写法)
select branch_id, account_id, -- sign(branch_id-2)返回-1(branch_id<2)、0(branch_id=2)、1(branch_id>2),统一映射分组 count(account_id) over (partition by decode(sign(branch_id - 2), -1, 'GROUP_1_2', 0, 'GROUP_1_2', 'GROUP_3_4') ) as group_total_accounts from account;
扩展说明
如果后续需要调整分组规则,比如把branch_id=1单独分组,2-4为另一组,只需要修改CASE或DECODE里的分支逻辑即可,适配性很强。
内容的提问来源于stack exchange,提问作者user3474704
相关产品推荐
相关产品推荐

