Oracle 分组函数
分组函数的介绍
分组函数作用于一组数据,并对一组数据返回一个值.
(引用网上的一张图)

分组函数的使用规则
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 分组函数的更多相关文章
- 【转】【CUBE】Oracle分组函数之CUBE魅力
http://blog.itpub.net/519536/viewspace-610997/ Oracle的CUBE与ROLLUP功能很相似,也是在数据统计分析领域的一把好手. 关于ROLLUP的查 ...
- Oracle分组函数之CUBE魅力
Oracle的CUBE与ROLLUP功能很相似,也是在数据统计分析领域的一把好手. 关于ROLLUP的查询统计功能请参考文章<Oracle分组函数之ROLLUP魅力>(http://www ...
- Oracle分组函数之ROLLUP用法
rollup函数 本博客简单介绍一下oracle分组函数之rollup的用法,rollup函数常用于分组统计,也是属于oracle分析函数的一种 环境准备 create table dept as s ...
- oracle 分组函数执行分析
先上例了: select job as "JOB1", avg(sal) as "avg sal" from scott.emp group by " ...
- [转]【ROLLUP】Oracle分组函数之ROLLUP魅力
原创:http://blog.itpub.net/519536/viewspace-610995 本文通过演示给出Oracle ROLLUP分组函数的用法,体验一下Oracle在统计查询领域中的函数魅 ...
- Oracle分组函数以及数据分组
简单总结一下对于数据的分组和分组函数. 本文所举实例,数据来源oracle用户scott下的emp,dept ,salgrade 3表:数据如下: 一.分组函数 1.sum()求和函数.max()求最 ...
- Oracle分组函数实例
分组函数也叫聚合函数.如果在查询只想要查分组函数,那么跟平时的查询语句并无不同: SQL ,,,,) ; SUM(T.PRIZENUM) AVG(T.PRIZENUM) --------------- ...
- oracle 分组函数、视图
组函数 分组函数作用于一组数据,对每一组返回一个值 组函数类型: 1.计数 count(列名 或 表达式) 对满足的行数进行统计 2.求和 sum(列名 或 表达式 ...
- Oracle分组函数之ROLLUP
功能介绍: 首先是进行无字段的聚合,然后在对字段进行从左到右依次组合后聚合 创建表: Create Table score ( classID Int, studentName ), subject ...
随机推荐
- python3----练习题(图片转字符画)
import argparse from PIL import Image def parse_param(): parser = argparse.ArgumentParser() # 命令行输入参 ...
- Spring JDBC样例
这里介绍一下通过Spring JDBC的方式进行数据库的增删改查的操作.在进行程序的编写之前我们需要在本地MySQL数据库中创建一张User表,如下所示: create database user_d ...
- Java中关于枚举的7种用法
1.定义常量: public enum Color { RED,ORANGE,YELLOW,GREEN,INDIGO,BLUE,PURPLE } 2.用于switch: enum Color { RE ...
- Windows游戏编程大师技巧之三角形填充
一.三角形的种类 三角形一般可以分为如下的四种类型(这四种类型是对于计算机来说的,不是数学意义上的分类): 平顶三角形:就是在计算机中显示的上面两个顶点的Y坐标相同. 平底三角形:就是在计算机中显示的 ...
- 一句css代码让网站变灰
<style> html{ -webkit-filter: grayscale(100%); -moz-filter: grayscale(100%); -ms-filter: grays ...
- Django学习笔记第五篇--实战练习一--查询数据库并操作cookie
一.启动项目: django-admin start mysite1 cd mysite1 python manage.py startapp loginapp 根据上文敲命令就可以创建好了一个项目结 ...
- 【BZOJ3211】花神游历各国 并查集+树状数组
[BZOJ3211]花神游历各国 Description Input Output 每次x=1时,每行一个整数,表示这次旅行的开心度 Sample Input 41 100 5 551 1 22 1 ...
- 《从零开始学Swift》学习笔记(Day 10)——运算符是“ +、-、*、/ ”吗?
原创文章,欢迎转载.转载请注明:关东升的博客 运算符是用于执行程序代码运算,会针对一个或一个以上操作数项目来进行运算.例如:2+3,其操作数是2和3,而运算符则是“+”.那么“+.-.*./”是运算符 ...
- 《从零开始学Swift》学习笔记(Day67)——Cocoa Touch设计模式及应用之MVC模式
原创文章,欢迎转载.转载请注明:关东升的博客 MVC(Model-View-Controller,模型-视图-控制器)模式是相当古老的设计模式之一,它最早出现在Smalltalk语言中.现在,很多计算 ...
- C 语言开发初涉-01 简单学习
尝试用C语言写windows程序: 简单的计算器 1.0版,仅用来熟悉C 开发windows的一些语法和语句用法 #include "stdafx.h" #include < ...