分组函数的介绍

分组函数作用于一组数据,并对一组数据返回一个值.

(引用网上的一张图)

分组函数的使用规则

SELECT [column,] group_function(column)  

FROM table  

[WHERE condition]  

[GROUP BY column]  

[HAVING group_function(column)expression  

[ORDER BY column|group_function(column)expression]  

实例讲解:

create table stu_class(
sno number(2) not null primary key,
sname varchar2(20) not null,
ssex varchar2(2),
sdept varchar2(20),
sclass varchar2(10),
sscore number(5)
);
insert into stu_class values(1,'小明','男','信息系','软件2班',60);
insert into stu_class values(2,'小洪','女','信息系','软件1班',70);
insert into stu_class values(3,'小亮','男','电子系','机械1班',66);
insert into stu_class values(4,'小张','女','电子系','机械1班',27);
insert into stu_class values(5,'小王','男','信息系','软件1班',65);
insert into stu_class values(6,'小李','女','信息系','软件1班',64);
insert into stu_class values(7,'小狗','男','电子系','机械2班',60);
insert into stu_class values(8,'小猫','女','电子系','机械1班',88);
insert into stu_class values(9,'小汪','男','电子系','机械2班',89);

分组函数(函数的介绍和说明引用http://blog.csdn.net/rex90522/article/details/54910729)

(不加Group By语句的话只可在查询列显示分组函数,不可显示其他字段)

MIN函数和MAX函数

MIN([DISTINCT|ALL] column|expression):返回每组中的最小值

MAX([DISTINCT|ALL] column|expression):返回每组中的最大值

MIN和MAX函数可以用于任何数据类型

select max(sscore) from stu_class;
select min(sscore) from stu_class;
select max(sname) from stu_class;
select max(sdept) from stu_class;

SUM函数和AVG函数

SUM([DISTINCT|ALL] column|expression):返回每组的总和

AVG([DISTINCT|ALL] column|expression):返回每组的平均值

SUM和AVG函数只能够对数值类型的列或表达式操作

select sum(sscore) from stu_class;
select avg(sscore) from stu_class;
select avg(sscore) from stu_class where sdept='信息系;

COUNT函数

COUNT(*):返回表中满足条件的行记录数

COUNT([DISTINCT|ALL] column|expression):返回表中满足条件的非空行记录数

--当前表中的总记录数
select count(*) from stu_class;
--查询sclass这一列不为空时的总记录数
select count(sclass) from stu_class;

DISTINCT函数

DISTINCT会消除重复记录后再使用组函数

--显示有多少不同的班级空值也会统计出来
select distinct(sclass) from stu_class;
--统计有多少院系
select count(distinct(sdept)) from stu_class;

分组函数中的空值处理

除了COUNT(*)和DISTINCT(COLUMN)之外,其他所有分组函数都会忽略列表中的空值,然后再进行计算

在分组函数中使用NVL函数可以使分组函数强制包含含有空值的记录

select avg(sscore) from stu_class where sclass='软件2班';
--如果sscore列有空值则按0处理
select avg(nvl(sscore,0)) from stu_class where sclass='软件2班';

GROUP BY子句

创建数据组

使用GROUP BY子句可将表中满足WHERE条件的记录按照指定的列划分成若干个小组,其中GROUP BY子句指定要分组的列

SELECT [column,] group_function(column)  

FROM table  

[WHERE condition]  

[GROUP BY column]  

[HAVING group_function(column)expression  

[ORDER BY column|group_function(column)expression]  

 使用GROUP BY子句

在SELECT列表中除了分组函数那些项,所有列都必须包含在GROUP BY子句中

--按照班级分组后求每个班级的得分最高的值,如果想将sclass查出则需要在group by语句中指定按其进行分组得到每班最大值
select sclass,max(sscore) from stu_class group by sclass;

GROUP BY所指定的列并不是必须出现在SELECT列表中

--group by 所指定的列不一定要出现在查询列表中
select sclass,sum(sscore) from stu_class group by sdept,sclass;

按多列分组的GROUP BY子句

--按照多列进行分组查询求平均值
select sdept,ssex,avg(sscore) from stu_class group by sdept,ssex;

HAVING子句

不能在WHERE子句中限制分组信息,要在HAVING子句中对数据组进行限制

--查询所有女生中按照院系和班级排序后平均成绩大于60的相关信息
select sdept,sclass,avg(nvl(sscore,0)) from stu_class where ssex='女' group by sdept,sclass having avg(nvl(sscore,0))>60;

组函数的嵌套

与单行函数不同,组函数只能嵌套两层

--嵌套后就不能在查询列表中查分组函数意外的其他列了,否则会报错
select max(avg(sscore)) from stu_class group by sdept,sclass;

SELECT语句执行过程

<1>通过FROM子句中找到需要查询的表

<2>通过WHERE子句进行非分组函数筛选判断

<3>通过GROUP BY子句完成分组操作

<4>通过HAVING子句完成组函数筛选操作

<5>通过SELECT子句选择显示的列或表达式及组函数

<6>通过ORDER BY子句进行排序操作

Oracle 分组函数的更多相关文章

  1. 【转】【CUBE】Oracle分组函数之CUBE魅力

    http://blog.itpub.net/519536/viewspace-610997/ Oracle的CUBE与ROLLUP功能很相似,也是在数据统计分析领域的一把好手.  关于ROLLUP的查 ...

  2. Oracle分组函数之CUBE魅力

    Oracle的CUBE与ROLLUP功能很相似,也是在数据统计分析领域的一把好手. 关于ROLLUP的查询统计功能请参考文章<Oracle分组函数之ROLLUP魅力>(http://www ...

  3. Oracle分组函数之ROLLUP用法

    rollup函数 本博客简单介绍一下oracle分组函数之rollup的用法,rollup函数常用于分组统计,也是属于oracle分析函数的一种 环境准备 create table dept as s ...

  4. oracle 分组函数执行分析

    先上例了: select job as "JOB1", avg(sal) as "avg sal" from scott.emp group by " ...

  5. [转]【ROLLUP】Oracle分组函数之ROLLUP魅力

    原创:http://blog.itpub.net/519536/viewspace-610995 本文通过演示给出Oracle ROLLUP分组函数的用法,体验一下Oracle在统计查询领域中的函数魅 ...

  6. Oracle分组函数以及数据分组

    简单总结一下对于数据的分组和分组函数. 本文所举实例,数据来源oracle用户scott下的emp,dept ,salgrade 3表:数据如下: 一.分组函数 1.sum()求和函数.max()求最 ...

  7. Oracle分组函数实例

    分组函数也叫聚合函数.如果在查询只想要查分组函数,那么跟平时的查询语句并无不同: SQL ,,,,) ; SUM(T.PRIZENUM) AVG(T.PRIZENUM) --------------- ...

  8. oracle 分组函数、视图

    组函数 分组函数作用于一组数据,对每一组返回一个值 组函数类型: 1.计数        count(列名 或 表达式)     对满足的行数进行统计 2.求和        sum(列名 或 表达式 ...

  9. Oracle分组函数之ROLLUP

    功能介绍: 首先是进行无字段的聚合,然后在对字段进行从左到右依次组合后聚合 创建表: Create Table score ( classID Int, studentName ), subject ...

随机推荐

  1. MathType中输入不了汉字如何处理

    MathType作为一款常见的数学公式编辑器在编辑数学公式时,不仅可以输入英文字符,对中文也有很好的兼容性.但是有些用户在使用MathType编辑公式时,发现一些汉字是输入不进去的,这个时候我们就需要 ...

  2. Spring_day02--log4j介绍_Spring整合web项目演示

    log4j介绍 1 通过log4j可以看到程序运行过程中更详细的信息 (1)经常使用log4j查看日志 2 使用 (1)导入log4j的jar包 (2)复制log4j的配置文件,复制到src下面 3 ...

  3. 剑指 offer set 17 判断一棵树是否是平衡树

    总结 1. 书上给出一个简洁代码, 说是会重复遍历. 2. 框架相同, 可以写出下面的代码 class Solution { public: bool ans; int getHeight(TreeN ...

  4. ionic触摸事件

    官方文档:http://ionicframework.com/docs/api/directive/onHold/ on-hold 长按事件on-tap 点击事件 on-double-tap  双击事 ...

  5. ORA-00845 MEMORY_TARGET not supported on this system解决办法

    ORA-00845: MEMORY_TARGET not supported on this system报错解决 Oracle 11g数据库修改pfile参数后启动数据库报错ora-00845 SQ ...

  6. 【BZOJ2791】[Poi2012]Rendezvous 倍增

    [BZOJ2791][Poi2012]Rendezvous Description 给定一个n个顶点的有向图,每个顶点有且仅有一条出边.对于顶点i,记它的出边为(i, a[i]).再给出q组询问,每组 ...

  7. Objective-C代码学习大纲(6)

    2011-05-11 14:06 佚名 otierney 字号:T | T 本文为台湾出版的<Objective-C学习大纲>的翻译文档,系统介绍了Objective-C代码,很多名词为台 ...

  8. LeetCode 笔记系列 18 Maximal Rectangle [学以致用]

    题目: Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing all ones ...

  9. 有关弱类型意识、DOM、动态语言与函数式编程

    一.弱类型意识  js变量是没有类型的 var a =1;   //a 就是一个变量  不要提类型 变量可以赋予任何类型的值,类型仅仅是值得性质  与变量无关   js 的基本类型 变量未赋值时,其值 ...

  10. 【Python算法】图与树的实现

    邻接列表及其类似结构 对于图结构的实现来说,最直观的方式之一就是使用邻接列表.下面我们来实现一个最简单的:假设现在我们有n个节点,编号分别为0,...,n-1. 然后,每个邻接列表就是一个数字列表,我 ...