[Oracle SQL] 使用rollup分组统计按统计结果分组排序显示的问题

本文探讨如何在Oracle SQL中使用rollup进行分组统计,并按统计结果进行排序。通过grouping_id找出小计行,利用连接操作结合特定排序方式,实现了按班级小计挂科人数逆序排列并展示每班每科挂科人数的需求。

今天想对某些班、课程的挂科人数做统计和小计,使用rollup可以很容易实现这个功能。

比如涉及的成绩(all_scores)表结构为

BH 班号
BJMC 班级名称
KCMC 课程名称
JD 绩点
其中JD为0表示挂科了。我们很容易写一个分组统计来统计各个班各个课程的挂科人数

select bjmc,
decode(grouping(kcmc),1,'小计',kcmc) kcmc,
sum(decode(jd,0,1,0)) fail_num
from all_scores 
where bh like '201255%'
group by rollup(bjmc,kcmc)

但是我想按班级小计的挂科人数逆序排列,然后再分组的显示每班每科的挂科人数。

查了一些Oracle的SQL的资料,好像没有这个对应的函数帮我们实现这个功能,所以想了一个办法,效率不是很高,但是可以达到目的。

WITH x AS 
         (SELECT bjmc,
                 DECODE (GROUPING (kcmc), 1, '小计', kcmc) kcmc,
                 SUM (DECODE (jd, 0, 1, 0)) fail_num,
                 GROUPING_ID (bjmc, kcmc) gp
            FROM a
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值