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
相关推荐
Leo.yuan9 分钟前
经营分析如何联动业务与财务?4步打通业财经营分析指标
数据库·数据分析·经营分析
Yana.nice13 分钟前
MySQL 事务的四大特性(ACID)
数据库·mysql·oracle
coder阿龙23 分钟前
基于SpringAI+Qdrant+Ollama本地模型和向量数据库开发问答和RAG检索
java·数据库·spring boot·ai·数据库开发
小小程序员.¥23 分钟前
oracle--视图、序列、索引
服务器·数据库·oracle
fire-flyer35 分钟前
ClickHouse系列(二):MergeTree 家族详解
大数据·数据库·clickhouse
Yana.nice43 分钟前
MySQL 三大日志(redo log、undo log、binlog)的区别和作用
数据库·mysql
XDHCOM1 小时前
MySQL CASE WHEN语句应用实例:如何实现条件查询与数据转换?
数据库·mysql
Jul1en_1 小时前
【Redis】常用命令及定时器实现思想
数据库·redis·缓存
杰克尼1 小时前
redis(day02-短信登录)
数据库·redis·缓存
知识分享小能手1 小时前
MongoDB入门学习教程,从入门到精通,MongoDB的分片管理(17)
数据库·学习·mongodb