网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
本月文章推荐
.做张grub启动盘防防身.
.ORACLE 回滚段表空间数据文件丢失.
.用sqlplus只输出数据到文本文件的.
.开放和基于标准的智能套件.
.ORACLE SQL性能优化系列(八).
.如何自动获取Oracle数据库启动时.
.Oracle数据库.
.静态 SQL语句中的“动态”功能.
.Oracle存储过程中任务和管道的应.
.ORACLE应用中常见的傻瓜问题1000.
.Oracle初学者入门指南-什么是DUL?.
.详细讲解Oracle中DECODE()函数的.
.Oracle数据库系统使用经验六则.
.ORACLE入门之关于用户管理.
.ORA-01555 快照过旧--详细解释.
.如果在create controlfile漏掉da.
.Oracle 数据库的备份与恢复[整理].
.了解Oracle存储过程中的角色.
.网格技术的构架、特点及其管理.
.[原创]PL/SQL的SELECT FOR UPDAT.

Oracle中用GROUPING SETS分组自定义汇总

发表日期:2008-2-9


本文通过文章作者的亲身经历来讲解如何在Oracle数据库中使用GROUPING SETS分组自定义。 当你与COUNT和SUM这类总计函数一起使用GROUP BY语句时,你一般得不到多级总数。GROUP BY中每个唯一的列组合生成一个总数,但这些总数不会“累加”到更高一级的总数中。 要实现这一点,你可以用GROUP BY ROLLUP或GROUP BY CUBE替代GROUP BY,不过它们会生成所有可能的总数,而你可能不需要全部总数。对GROUP BY CUBE而言,将会生成2^n组总数,这里的n是GROUP BY中列的数目。 查看下面的查询,它使用了SH样本模式: SELECT prod_id, cust_id, channel_id, SUM(quantity_sold) FROM sales WHERE cust_id < 3 GROUP BY CUBE (prod_id, cust_id, channel_id) 这将生成8组总数: 所有行的总和 每个通道,包括所有产品和顾客。 每个顾客,包括所有产品和通道。 每项产品,包括所有顾客和通道。 每个通道/顾客组合,包括所有产品。 每个通道/产品组合,包括所有顾客。 每个产品/顾客组合,包括所有通道。 每个产品、顾客和通道组合。 可能的组合非常多。GROUP BY CUBE中每增加一列,生成的总数就会翻一番。 可以用GROUP BY GROUPING SETS来代替GROUP BY CUBE。你可以应用来指定你感爱好的总数组合。因为它不必计算它不需要集合(也不会产生太多结果),所以对SQL引擎来说更为高效。 其格式为: GROUP BY GROUPING SETS ((list), (list) ... ) 这里(list)是圆括号中的一个列序列,这个组合生成一个总数。要增加一个总和,必须增加一个(NUlL)分组集。 例如,假如只要生成每项产品(包括所有顾客和通道)和每个顾客/通道组合(包括所有产品)的总数,可以输入: SELECT prod_id, cust_id, channel_id, SUM(quantity_sold) FROM sales WHERE cust_id < 3 GROUP BY GROUPING SETS ( (prod_id), (cust_id, channel_id) ); 这种方法将这个数据集生成的总数数量从180个减少到37个,并帮助你着重回答你希望解答的问题。
上一篇:Oracle巧取指定记录以及巧用外关联查询 人气:793
下一篇:利用Oracle9i XML DB 来解决复杂编码问题 人气:634
浏览全部Oracle教程的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐