Oracle中的Rollup 使用方法

  • Oracle 版本: 19c ,Production version 19.3.0.0.0 Enterprise

  • 使用场景:对结果集生成总计、小计效果

  • 模拟数据:

    数学 语文 学号 班级
    90 80 0001 1班
    80 95 0002 1班
    77 99 0003 2班
    95 85 0004 2班
  • 例子 1(按照班级分组小计、班级总分) :

    sql 复制代码
    SELECT 
    	NVL(班级,'总计') 班级,
    	CASE WHEN 班级 IS NULL THEN '-' ELSE NVL(学号,'小计') END 学号,
      SUM(数学) 数学,
      SUM(语文) 语文
    FROM score
    GROUP BY ROLLUP(班级,学号)
    ORDER BY 班级,学号
    班级 学号 数学 语文
    1班 0001 90 80
    1班 0002 80 95
    1班 小计 170 175
    2班 0003 77 99
    2班 0004 95 85
    2班 小计 172 184
    总计 - 342 359
  • 例子2 (只有总计)

    sql 复制代码
    SELECT 
    	NVL(班级,'总计') 班级,
    	CASE WHEN 班级 IS NULL THEN '-' ELSE NVL(学号,'小计') END 学号,
      SUM(数学) 数学,
      SUM(语文) 语文
    FROM score
    GROUP BY ROLLUP((班级,学号)) -- 意思是 班级、学号组合分组
    ORDER BY 班级,学号
    班级 学号 数学 语文
    1班 0001 90 80
    1班 0002 80 95
    2班 0003 77 99
    2班 0004 95 85
    总计 - 342 359
相关推荐
wgzrmlrm7414 分钟前
如何解决ORA-28040没有匹配的验证协议_sqlnet.ora版本兼容设置
jvm·数据库·python
一江寒逸14 分钟前
零基础从入门到精通MySQL(附加篇):面试八股文全集
数据库·mysql·面试
数厘20 分钟前
2.6MySQL库表操作指南(电商数据分析专用)
数据库·mysql·数据分析
需要点灵感21 分钟前
SQL Server 存储过程语法整理
数据库·sql
刘~浪地球23 分钟前
数据库与缓存--分库分表实战指南
网络·数据库·缓存
Mr_Xuhhh28 分钟前
深入Java多线程进阶:从锁策略到并发工具全解析
前端·数据库·python
数厘34 分钟前
2.5可视化工具与 MySQL 连接配置及基础操作
数据库·mysql
沃尔威武1 小时前
性能调优实战:从火焰图定位到SQL优化的全流程
android·数据库·sql
数厘1 小时前
2.7SQL 四大分类:理解与避坑
数据库·sql
亮子AI2 小时前
【PostgreSQL】推荐几个PostgreSQL管理工具
数据库·postgresql