Oracle分组函数
Count:统计查询结果有几条记录,如果数据库表的没有数据, count(*)返回的不是 null,而是 0
Select count(*) from dual;
- Avg, Max, Min, Sum
Select avg(comm) from emp;--平均值
Select max(comm) from emp;--最大值
Select min(comm) from emp;--最小值
Select sum(comm) from emp;--总和
--分组列中空值,可使用Nvl()函数强制分组函数处理空值
select avg(nvl(comm, 0)) from emp;
- GROUP BY 子句
- 出现在 SELECT 列表中的字段或者出现在 order by 后面的字段,如果不是包含在分组函数中,那么该字段必须同时在 GROUP BY 子句中出现
- 包含在 GROUP BY 子句中的字段则不必须出现在 SELECT 列表中
- 可使用 where 字句限定查询条件
- 可使用 Order by 子句指定排序方式
- 如果没有 GROUP BY 子句, SELECT 列表中不允许出现字段(单行函数)与分组函数混用的情况
-
select empno, sal from emp; --合法 select avg(sal) from emp;--合法 select empno, initcap(ename), avg(sal) from emp;--非法 --不允许在 WHERE 子句中使用分组函数 select deptno, avg(sal) from emp where avg(sal) > 2000; group by deptno; --基本用法:按部门统计销售额 select deptno,sum(comm) from sales group by deptno; --使用Having语句:按部门统计销售额,并且只显示销售总额小于30的部门及销售额 select deptno,sum(comm) totalnum from sales group by deptno having sum(comm) <30;
HAVING 子句:Wheret和having子句都用来筛选数据,但是where是针对原数据进行筛选,而having子句只是针对汇总后的结果进行
-
select deptno, job, avg(sal) from emp where hiredate >= to_date('1981-05-01','yyyy-mm-dd') group by deptno,job having avg(sal) > 1200 order by deptno,job; --Order by排序:如果order by后跟着多个字段,默认排序是先对第一个字段升序排序,然后再排第二个字段
GROUP BY 子句