[Oracle SQL] 使用rollup分组统计按统计结果分组排序显示的问题
来源:互联网 发布:icloud中的备份恢复mac 编辑:程序博客网 时间:2024/05/18 21:50
今天想对某些班、课程的挂科人数做统计和小计,使用rollup可以很容易实现这个功能。
比如涉及的成绩(all_scores)表结构为
BH班号BJMC班级名称KCMC课程名称JD绩点其中JD为0表示挂科了。我们很容易写一个分组统计来统计各个班各个课程的挂科人数select bjmc,decode(grouping(kcmc),1,'小计',kcmc) kcmc,sum(decode(jd,0,1,0)) fail_numfrom 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 all_scores WHERE bh LIKE '201255%' GROUP BY ROLLUP (bjmc, kcmc) ) SELECT a.bjmc, a.kcmc, a.fail_num FROM x a, x b WHERE a.bjmc = b.bjmc AND b.gp = 1ORDER BY b.fail_num DESC, a.bjmc, a.gp DESC, a.kcmc
思想很简单,使用grouping_id找出小计的行作为b表,然后对于a表中的每一行,连接到b表对应的小计数。
然后再按我的想法,先按小计数逆序,班级名称排序。
为了保证小计项为每个块的第一行,先优先统计行标记即可。
0 0
- [Oracle SQL] 使用rollup分组统计按统计结果分组排序显示的问题
- oracle 显示多个分组的统计结果 GROUPING SETS
- oracle sql 分组统计
- oracle分组统计sql
- ROLLUP和CUBE语句。 ORACLE分组统计
- ROLLUP和CUBE语句。 ORACLE分组统计
- oracle中分组排序统计
- SQL进行排序、分组、统计
- SQL进行排序、分组、统计
- Oracle按不同时间分组统计的sql
- sql 分组统计的例子
- SQL 分组 统计 按 类分组 统计 子类 显示 类名
- SQL进行排序、分组、统计技巧
- oracle分组统计
- ORACLE 统计分组语句
- oracle 分组统计
- Oracle分组统计查询
- oracle分组统计查询
- android,意图,打开百度网址
- Eclipse如何点出方法
- Prime Ring Problem
- CIFS
- XML第一讲:XML基本讲解
- [Oracle SQL] 使用rollup分组统计按统计结果分组排序显示的问题
- iOS学习之2-使用ASIHttpRequest调用WebService
- hdu 1231 最长子序类
- UVALive 5135 Mining Your Own Business(BCC、割顶)
- 大数据量数据库优化
- JAVA中this用法小结
- Linux下OpenCV2.4.x的安装与配置
- Linux内核链表学习笔记
- java解析xml的几种方式