您的位置:首页 > 数据库 > Oracle

Oracle分组函数

2019-05-08 17:02 99 查看

当我们要统计一张表数据有多少的时候

例如,想查询employees表一共有多少条记录,难道就要把SELECT * FROM employees查出来然后再数一数有多少行吗?

虽然这个方法可以,但是不推荐使用。对于统计总数、平均数这类计算,oracle提供了专门的分组函数,就是通过使用分组函数进行查询,就是分组查询,它可以快速获得结果。

 

以查询employees表一共有多少条记录为例,我们可以使用oracle内置的COUNT()函数查询:

-- 使用COUNT()函数进行分组查询:

SELECT COUNT(*)

FROM employees

 

COUNT(*)表示查询所有列的行数,要注意分组的计算结果虽然是一个数字,但是查询的结果仍然是一个二维表,只是这个二维表只有一行一列,并且列名是COUNT(*)。

不过,通常时候,在使用分组查询时,我们应该给列名设置一个别名,便于处理结果:

-- 使用分组查询并设置结果集的列名为num:

SELECT COUNT(*) num

FROM employees

 

COUNT(*)和COUNT(id)实际上是一样的效果。

不过,要注意的是,分组查询同样可以使用WHERE条件,因此我们可以方便地统计出有多少姓相同的员工、多少工资10000以上的员工等:

-- 使用分组查询并设置WHERE条件:

SELECT COUNT(*)

FROM employees

WHERE salary > 10000

 

分组函数除了COUNT()函数外,oracle还提供了以下分组函数:

函数   说明

SUM 计算某一列的合计值,该列必须为数值类型

AVG 计算某一列的平均值,该列必须为数值类型

MAX 计算某一列的最大值

MIN 计算某一列的最小值

 

注意,MAX()和MIN()函数并不限于数值类型。如果是字符类型,MAX()和MIN()会返回排序最后和排序最前的字符。

 

要统计男生的平均成绩,我们用下面的分组查询:

-- 使用分组查询计算员工平均工资:

SELECT AVG(*) avg

FROM employees ;

 

 

要特别注意:如果分组查询的WHERE条件没有匹配到任何行,COUNT()会返回0,而SUM()、AVG()、MAX()和MIN()会返回NULL:

 

-- WHERE条件salary < 0匹配不到任何行:

SELECT AVG(*)  avg

FROM employees

WHERE salary < 0;

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: