ORACLE学习笔记系列(14)聚合函数
常用的聚合函数
1、计数 COUNT()函数
COUNT()函数用来计算表中记录的个数(count(*))或者列中值的个数(count(column)),计算内容由SELECT语句指定。
使用COUNT函数时,必须指定一个列的名称或者使用星号,星号表示计算一个表中的所有记录。
两种使用形式如下。
COUNT(*),计算表中行的总数,即使表中行的数据为NULL,也被计入在内。
COUNT(column),计算column列包含的行的数目,如果该列中某行数据为NULL,则该行不计入统计总数。
注意:COUNT()函数只对那些传递到函数(括号)中的参数不是NULL的行计数。
Select count(1) 和Select count(*) 返回的结果一样。
(1)使用COUNT(*)函数对表中的行数计数。
COUNT(*)函数将返回满足SELECT语句的WHERE子句中的搜索条件的函数。
--例如 查询EMP表中的所有记录的行数。
SELECT COUNT(*) FROM EMP;
在该例中,SELECT语句中没有WHERE子句,那么认为表中的所有行都满足SELECT语句,所以SELECT语句将返回表中所有行的计数。
如果DBMS在其系统表中存储了表的行数,COUNT(*)将很快地返回表的行数,
因为这时, DBMS不必从头到尾读取表,并对物理表中的行计数,而直接从系统表中提取行的计数。
而如果DBMS没有在系统表存储表的行数,将具有NOT NULL约束的列作为参数,使用COUNT函数,则可能更快地对表行计数。
(2)使用COUNT(column)函数对一列中的数据计数。
COUNT(column)函数可用于对一列中的数据值计数。
与忽略了所有列的COUNT(*)函数不同,COUNT(column)函数逐一检查一列(或多列)中的值,并对那些值不是NULL的行计数。
--例如 查询一列中所有记录的行数
SELECT COUNT(EMP.NAME) FROM EMP;
(3)使用COUNT(column)函数同时对多列中的数据计数
COUNT(column )函数不仅可用于对一列中的数据值计数,也可以对多列中的数据值计数。
如果对多列计数,则需要将要计数的多列连接后,作为COUNT(column )函数的参数。
--例如 使用COUNT(column )函数对多列中的数据计数
SELECT COUNT(EMP.ID), --id不为空的记录个数
COUNT(EMP.SALARY), --deptname不为空的记录个数
COUNT(CAST(EMP.ID AS INT) + EMP.SALARY), --两者都不为空的个数
COUNT(SYSDATE + 2)
FROM EMP;
在进行两列的连接时,如果它们的数据类型不一致,要使用CAST表达式将它们转换成相同的数据类型。
因为使用的是“+”运算符,所以两列的数据类型必须都是数值类型,或能进行“+”运算。
如果在被连接的列中的任何一列有NULL值时,那么连接的结果为NULL,则该列不会被 COUNT( )函数计数。
原理:任何数值 + NULL 都等于 NULL
2、求和 SUM()函数
求和函数SUM( )用于对数据求和,返回选取结果集中所有值的总和。
语法如下:
SELECT SUM(COLUMN_NAME) FROM TABLE_NAME;
说明: 适用范围:SUM()函数只能作用于数值型数据,即列column_name中的数据必须是数值型的。
对NULL值的处理:当对某列数据进行求和时,如果该列存在NULL值,则SUM函数会忽略该值。
示例:查找员工总工资大于10000的部门
SELECT DEPTNAME, SUM(SALARY)
FROM EMP
GROUP BY EMP.DEPTNAME
HAVING SUM(SALARY) > 10000
ORDER BY DEPTNAME;
3、求平均值 AVG()
函数AVG()用于计算一列中数据值的平均值。
语法如下:
SELECT AVG(COLUMN_NAME) FROM TABLE_NAME;
适用范围:与SUM( )函数一样,AVG()函数只能作用于数值型数据,即列column_name中的数据必须是数值型的。
对NULL值的处理:在计算平均值时,AVG()函数将忽略NULL值。
AVG()函数的执行过程实际上是将一列中的值加起来,再将其和除以非NULL值的数目,等价于sum(column)/ count(column)。
如果在某列中,所有行的值都是NULL,则AVG()函数将返回NULL值。
示例:
SELECT AVG(SALARY) AS AVG1,
SUM(SALARY) / COUNT(*) AS AVG2,
SUM(SALARY) / COUNT(SALARY) AS AVG3
FROM EMP;
实际上,“avg(salary)”与“sum(salary)/count(salary)”语句是等价的。
因为avg(salary)语句的执行过程实际上是将salary列中的值加起来,再将其和除以非NULL值的数目(也就等价于count(salary))。
而语句“sum(salary) / count(*)”则不然,因为 COUNT(*) 返回的是表中所有记录的个数,而不管salary列中的数值是否为NULL。
4、求最大值 MAX(),最小值 MIN()
当需要了解一列中的最大值时,可以使用MAX()函数;同样,当需要了解一列中的最小值时,可以使用MIN()函数。
语法如下:
SELECT MAX(COLUMN_NAME), MIN(COLUMN_NAME) FROM TABLE_NAME;
适用范围:列column_name中的数据可以是数值、字符串或是日期时间数据类型。
MAX()/MIN()函数将返回与被传递的列同一数据类型的单一值。
对 NULL 值的处理:确定列中的最大值(最小值)时,MAX、MIN 函数忽略 NULL 值。
但是, 如果在该列中,所有行的值都是 NULL,则 MAX、MIN 函数将返回 NULL 值。
示例:获得各种工作的最高工资和最低工资
SELECT JOB, MAX(SALARY), MIN(SALARY) FROM EMP GROUP BY JOB;
注意:
在字符串数据类型中使用 MAX 和 MIN 时,对字符型数据的最大值,是按照首字母由 A~Z 的顺序排列,越往后,其值越大。
对于汉字则是按照其全拼拼音排列的,若首字符相 同,则比较下一个字符,以此类推,返回结果的数据类型为字符型数据。
在日期数据类型中使用 MAX 和 MIN 时,对日期时间类型的数据也可以求其最大/最小值,
其大小排列就是日期时间的早晚,越早认为其值越小,返回结果的数据类型为日期型。
5、聚合函数的重值处理
前面介绍的几种聚合函数,可以作用于所选列中的所有数据(不管列中的数据是否有重置),
也可以只对列中的非重值进行处理,即把重复的值只取一次进行聚合分析。
当然,对 于 MAX()/MIN()函数来讲,重值处理意义不大。
可以使用 ALL 关键字指明对所选列中的所有数据进行处理,
使用 DISTINCT 关键字指明对所选列中的非重值数据进行处理。
以 COUNT()函数为例,语法如下。
SELECT COUNT([ ALL / DISTINCT ] COLUMN_NAME) FROM TABLE_NAME;
说明:[ALL/DISTINCT]在缺省状态下,默认是 ALL 关键字,即不管是否有重 值,处理所有数据。
其他聚合函数的用法与此相同。
例如查询部门名称列中存在的不同记录的数目:
SELECT COUNT(DISTINCT EMP.DEPTNAME) FROM EMP;
相关推荐
Oracle学习笔记精华版是针对数据库管理系统Oracle的一份重要学习资源,涵盖了从基础概念到高级特性的全面知识。Oracle,作为全球广泛使用的大型企业级数据库系统,对于IT专业人员尤其是数据库管理员(DBA)来说,是...
以下是对Oracle学习笔记整理的主要知识点的详细说明: 1. **数据库选择**: 在决定使用哪种数据库时,通常需要考虑项目的规模、性能需求、安全性要求以及可用资源。Oracle数据库因其稳定性、可扩展性和高性能而被...
《MLDN_Oracle学习笔记+源码 李兴华讲解》是针对Oracle数据库系统的一份详尽学习资源,由知名讲师李兴华精心编撰。这份资料不仅包含了丰富的理论知识,还提供了源代码实例,旨在帮助学习者深入理解和掌握Oracle...
在"ORACLE学习笔记系列(15)使用扩展的 GROUP BY 子句"这篇博文中,作者深入探讨了GROUP BY子句的高级用法,特别是如何利用扩展功能来处理更复杂的查询需求。 在标准的GROUP BY语句中,我们通常会指定一列或多列,...
韩顺平2011年的Oracle学习笔记主要涵盖了Oracle的基本使用方法,包括一系列的基本命令。 1. **连接命令**:在Oracle中,我们通常使用SQL*Plus作为客户端工具连接到数据库服务器。连接命令是`sqlplus [username/...
常用的聚合函数包括COUNT、SUM、AVG、MAX和MIN等。它们通常与GROUP BY语句一起使用,对分组后的数据进行聚合计算。 #### 集合操作 集合操作可以将多个SELECT查询结果集进行合并、求交集和差集等。具体操作包括: 1...
《成功之路Oracle11g学习笔记》是一本专为初学者设计的Oracle数据库学习资源,旨在帮助读者系统地掌握Oracle11g的基础知识。Oracle11g是Oracle公司推出的一个重要版本,它提供了许多增强的功能和优化,使得数据库...
理解SELECT语句、JOIN操作、子查询、聚合函数、索引的使用以及DML(INSERT、UPDATE、DELETE)命令是学习Oracle的基础。 4. **PL/SQL编程** PL/SQL是Oracle特有的过程化语言,用于编写存储过程、函数和触发器。学习...
### Oracle学习笔记要点 #### 一、SQL Plus的使用方法 - **命令行方式**: 在命令行中直接输入 `sqlplus` 命令,并随后输入用户名和密码。 - **客户端方式**: 使用Oracle提供的SQL Plus客户端工具进行登录。 - **Web...
此外,Oracle还提供了高级SQL特性,如子查询、连接查询、聚合函数、窗口函数等,用于处理复杂的数据操作和分析。 3. **存储管理**:Oracle的表空间和段管理机制是其存储管理的核心。表空间是数据库逻辑存储的容器,...
### Oracle 数据库学习笔记 #### Oracle DML 数据库操作语言 - **数据插入**: 在 Oracle 数据库中,可以通过 `INSERT` 语句将一个表的部分数据插入到另一个表中。例如,利用 `INSERT INTO table_name (subquery)` ...
### Oracle学习笔记知识点详解 #### 一、SQL概述与Oracle简介 - **SQL**(Structured Query Language,结构化查询语言)是一种用于管理关系型数据库的标准语言。它被用来执行各种数据库操作,如查询数据、更新数据...
在"Oracle培训笔记2"中,我们可以看到一系列的课程涵盖了XML基础和多行函数的应用,这些都是Oracle数据库管理和开发中的关键知识点。 XML(可扩展标记语言)在Oracle中的应用非常广泛,特别是在数据交换和存储非...
本资料包是针对Oracle SQL的学习笔记,包含了丰富的练习题及解答,旨在帮助学习者深入理解和掌握SQL在Oracle环境中的运用。 1. **SQL基本查询操作** "1.SQL基本查询操作.txt"这部分内容可能涵盖了简单的SELECT语句...
Oracle学习笔记:一天掌握核心概念 Oracle数据库系统是全球广泛使用的数据库管理系统之一,以其高效、稳定和可扩展性而著称。本教程旨在帮助你快速理解Oracle的基本概念和操作,让你在一天之内能够掌握关键知识。 ...
Oracle学习笔记涵盖了数据库管理、SQL查询以及PL/SQL编程等多个方面。Oracle是全球最广泛使用的商业关系型数据库管理系统之一,其高效稳定性和强大的数据处理能力使其在企业级应用中占据了重要地位。以下是对"oracle...
### Oracle学习笔记知识点详解 #### 一、SQL查询与结构 **知识点1:数据库文件与日志** 在Oracle中,数据库文件(`.dbf`)和日志文件(`.log`)是数据库的重要组成部分。数据库文件存储实际的数据,而日志文件记录...
1. SQL查询脚本:用于演示不同类型的SQL语句,如SELECT、INSERT、UPDATE、DELETE,以及更复杂的JOIN、子查询、聚合函数等。 2. PL/SQL程序:可能包含存储过程、函数、包等,展示如何在Oracle中进行数据库编程。 3. ...
这篇学习笔记将带你深入理解Oracle11g的核心概念和技术,帮助你踏上数据库管理的成功之路。 首先,Oracle11g的基础部分涵盖了数据库安装、配置与管理。在安装过程中,你需要了解如何选择合适的安装选项,如企业版或...