分组函数的介绍
分组函数
分组函数作用于一组数据,并对一组数据返回一个值.
常见的分组函数有:
函数名称 函数描述
Count 返回找到的记录数
Min 返回一个数字列或计算列的最小值
Max 返回一个数字列或计算列的最大值
Sum 返回一个数字列或计算列总和
avg 返回一个数字列或计算列的平均值
分组函数的语法:
SELECT [column,] group_function(column), ...
FROM table
[WHERE condition]
[GROUP BY column]
[ORDER BY column];
//返回总记录数 注:* 代表的是:一条记录
SQL> select count(*) from emp;
COUNT(*)
----------
14
//返回comm不为空的总记录数
SQL> select count(comm) from emp;
COUNT(COMM)
-----------
4
//COUNT(DISTINCT expr) 返回 expr非空且不重复的记录总数
SQL> select count(distinct(sal)) from emp;
COUNT(DISTINCT(SAL))
--------------------
12
注意:组函数忽略空值。
//返回所有员工的平均工资
SQL> select avg(nvl(sal,0)) from emp;
注意:NVL函数使分组函数无法忽略空值
//返回员工编号最小值
SQL> select min(empno) from emp;
//返回员工工资最大值
SQL> select max(sal) from emp;
//求该月本公司发出的工资总额
SQL> select sum(comm)+sum(sal) from emp;
SUM(COMM)+SUM(SAL)
------------------
31225
SQL> select sum(nvl(sal,0)+nvl(comm,0)) from emp;
SUM(NVL(SAL,0)+NVL(COMM,0))
---------------------------
31225
以上两个语句的结果相同
Group by子句
Group By语句从英文的字面意义上理解就是“根据(by)一定的规则进行分组(Group)”。它的作用是通过一定的规则将一个数据集划分成若干个小的区域,然后针对若干个小区域进行数据处理。 如果在查询的过程中需要按某一列的值进行分组,以统计该组内数据的信息时,就要使用group by子句。不管select是否使用了where子句都可以使用group by子句。
注意:group by子句一定要与分组函数结合使用,否则没有意义。
//求出每个部门的员工人数
SQL> select deptno,count(*) as "人数" from emp group by deptno;
DEPTNO 人数
------ ----------
30 6
20 5
10 3
//求出每个部门的员工的平均工资
SQL> select deptno,avg(nvl(sal,0)) from emp group by deptno;
DEPTNO AVG(NVL(SAL,0))
------ ---------------
30 1566.6666666666
20 2175
10 2916.6666666666
//注意:group by 子句中的列不必包含在SELECT 列表中
SQL> select avg(nvl(sal,0)) from emp group by deptno;
AVG(NVL(SAL,0))
---------------
1566.6666666666
2175
2916.6666666666
//求出某个部门中相同职位的员工人数 group by 后可以跟多个分组的字段
SQL> select deptno,job,count(*) from emp group by deptno,job order by deptno;
DEPTNO JOB COUNT(*)
------ --------- ----------
10 CLERK 1
10 MANAGER 1
10 PRESIDENT 1
20 ANALYST 2
20 CLERK 2
20 MANAGER 1
30 CLERK 1
30 MANAGER 1
30 SALESMAN 4
9 rows selected
非法使用组函数
1、 所用包含于SELECT 列表中,而未包含于组函数中的列都必须包含于 GROUP BY 子句中。
举例:
SQL> select empno,count(job) from emp;
正确写法如下:
SQL> select empno,count(job) from emp group by empno;
2、 不能在 WHERE 子句中使用组函数(注意)。
SQL> select deptno from emp where count(job)>0 group by deptno;
备注:ORA-00934: 此处不允许使用分组函数
Having 子句
HAVING 子句对 GROUP BY 子句设置条件的方式与 WHERE 子句和 SELECT 语句交互的方式类似。WHERE 子句搜索条件在进行分组操作之前应用;而 HAVING 搜索条件在进行分组操作之后应用。HAVING 语法与 WHERE 语法类似,但 HAVING 可以包含聚合函数。HAVING 子句可以引用选择列表中出现的任意项。
备注:having子句通常与group by子句结合使用
语法:
SELECT column, group_function
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[HAVING group_condition]
[ORDER BY column];
//查询部门的员工人数大于五部门编号
SQL> select deptno,count(*) from emp group by deptno having count(*)>5;
备注:分组函数可以嵌套
总结:整个查询语句的语法格式如下:
SELECT column, group_function(column)
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[HAVING group_condition]
[ORDER BY column];
分享到:
相关推荐
HAVING 字句的使用:在 GROUP BY 和 HAVING 字句之前尽量剔除多余的行, GROUP BY 和 HAVING 的执行顺序应该如下最优:select 的 Where 字句选择所有合适的行,Group By 用来分组个统计行,Having 字句用来剔除多余...
而`HAVING`子句则是与`GROUP BY`配合使用的,用于在分组后的结果集上设置筛选条件。`HAVING`子句允许包含聚合函数,因为它是在`GROUP BY`对数据进行分组并计算聚合函数之后应用的。例如,要找出所有部门工资总和超过...
- 本章主要介绍Oracle SQL中的单行函数,包括字符函数、数字函数、日期函数等,并学习如何使用这些函数来处理数据。 **3.2 SQL函数介绍** - SQL函数是指那些能够接收一个或多个输入参数,并返回一个结果的内置函数...
5. **GROUP BY子句**:用于将数据分组,以便应用组函数。 6. **HAVING子句**:用于过滤分组后的结果。 7. **嵌套组函数**:可以在同一个查询中使用多个组函数。 #### 七、子查询 ##### 6.2 子查询介绍 子查询是在...
4. 用于限制分组函数返回值的字句是HAVING,它在GROUP BY之后使用,用于过滤分组后的结果。 5. 显示没有Email地址的教师姓名的正确SQL语句是`SELECT name FROM teacher WHERE email IS NULL;` 6. 反向键索引主要...
4. 限制分组函数返回值的字句是HAVING,它在GROUP BY语句后用于过滤满足条件的分组。 5. 显示没有Email地址的教师姓名的正确SQL语句是`SELECT name FROM teacher WHERE email IS NULL`。 6. 反向键索引适用于列值...
### Oracle数据库知识点详解 #### 一、SQL的基础概念与应用 ...以上内容涵盖了Oracle数据库中关于SQL基础、查询、函数、连接、汇总以及数据操作等方面的知识点,适合初学者系统学习Oracle数据库的相关技能。