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
相关推荐
~~李木子~~1 小时前
MySQL 迁移总结报告
数据库·mysql
有梦想的攻城狮3 小时前
通过Lettuce实现PB3格式对象在Redis中的存储与查询
数据库·redis·缓存·pb3
桦03 小时前
MySQL【函数】
数据库·mysql
⑩-3 小时前
Redis(1)
数据库·redis·缓存
2301_803554524 小时前
主从同步配置的步骤
数据库
无敌最俊朗@4 小时前
00-7天攻破sqlite数据库(总览sqlite)
数据库·sqlite
Access开发易登软件4 小时前
Access导出带图表的 HTML 报表:技术实现详解
数据库·后端·html·vba·导出·access
_Minato_4 小时前
数据库知识整理——SQL数据定义
数据库·sql·mysql·oracle·database·数据库开发·数据库架构
程序员卷卷狗5 小时前
MySQL 四种隔离级别:从脏读到幻读的全过程
数据库·mysql
l1t5 小时前
改写ITPUB newkid的求解数独DuckDB SQL为Clickhouse格式
数据库·sql·clickhouse·duckdb