作者:zqb_0125 | 来源:互联网 | 2014-07-11 17:33
Oracle之组函数、分组统计1.组函数在SQL中常用的组函数有以下几个:COUNT():求出全部的记录数--SELECTCOUNT(empno)FROMemp;MAX():求出一组中的最大值--SELECTMAX(sal)FROMemp;M...SyntaxHighlighte
1.组函数
在SQL中常用的组函数有以下几个:
COUNT():求出全部的记录数 --SELECT COUNT(empno) FROM emp ;
MAX() :求出一组中的最大值 --SELECT MAX(sal) FROM emp ;
MIN() :求出最小值 --SELECT MIN(sal) FROM emp ;
AVG() :求出平均值 --SELECT AVG(sal) FROM emp ;
SUM() :求和 --SELECT SUM(sal) FROM emp WHERE deptno=20 ;
其中MAX()和MIN()一般是针对数字的应用函数。
www.2cto.com
2.分组统计
要使用GROUP BY进行分组,此时SQL语法格式如下:
[sql]
SELECT {DISTINCT} * | 查询列1 别名1, 查询列2 别名2,…
FROM 表名称1 别名1 , 表名称2 别名2 ,…
{WHERE 条件(s)}
{GROUP BY 分组条件 }
{ORDER BY 排序字段 ASC|DESC , 排序字段 ACS | DESC ,…}
1.求出每个部门雇员数量:
[sql]
SELECT deptno,COUNT(empno) FROM emp GROUP BY deptno ;--按照部门分组的。
2.求出每个部门的平均工资:
[sql]
SELECT deptno,AVG(sal)FROM emp GROUP BY deptno ;
注意:
1.如果程序使用了分组函数,则有两种可以使用的情况:
程序中存在了GROUP BY ,并指定了分组条件,这样可以将分组条件一起查询出来。
如果不适用分组,则只能单独使用分组函数。
2.在使用分组函数的时候,不能出现分组函数和分组条件之外的字段。
3.按部门分组,并显示部门的名称,级每个部门的员工数:
[sql]
SELECT d.dname,COUNT(e.empno) FROM dept d,emp e WHERE d.deptno=e.deptno GROUP BY d.dname ;
4.要求显示出平均工资大于2000的部门编号和平均工资
条件:AVG(sal)>2000. www.2cto.com
[sql]
SELECT deptno,AVG(sal) FROM emp WHERE AVG(sal)>2000 GROUP BY deptno ;
分组函数只能在分组中使用,不允许在WHERE语句之中出现,那么如果现在假设要指定分组的条件,则只能通过第二种条件的指令:HAVING,此时的SQL语法格式:
[sql]
SELECT {DISTINCT} * | 查询列1 别名1,查询列 2 别名2,…
FROM 表名称1 别名1 , 表名称2 别名2 ,…
{WHERE 条件(s)}
{GROUP BY 分组条件 {HAVING 分组条件}}
{ORDER BY 排序字段ASC|DESC ,排序字段 ACS | DESC ,…}
· 使用HAVING完成以上的操作
[sql]
SELECT deptno,AVG(sal) FROM emp GROUP BY deptno HAVING AVG(sal)>2000;
5.显示非销售人员工作名称以及从事同一工作雇员的月工资的总和,并且要满足从事同一工作的雇员的月工资合计大于$5000,输出结果按月工资的合计升序排列:
5.1显示全部的非销售人员:job<>&#39;SALESMAN&#39;
[sql]
SELECT *
FROM emp www.2cto.com
WHERE job<>&#39;SALESMAN&#39; ;
5.2按工作分组,同时求出工资的总和:
[sql]
SELECT job,SUM(sal)
FROM emp
WHERE job<>&#39;SALESMAN&#39;
GROUP BY job ;
5.3对分组的条件进行限制,工资总和大于5000
[sql]
SELECT job,SUM(sal)
FROM emp
WHERE job<>&#39;SALESMAN&#39;
GROUP BY job HAVING SUM(sal)>5000 ;
5.4使用排序,按升序排序
[sql]
SELECT job,SUM(sal) su
FROM emp www.2cto.com
WHERE job<>&#39;SALESMAN&#39;
GROUP BY job HAVING SUM(sal)>5000
ORDER BY su ;
分组的简单原则:
· 只要一列存在重复的内容才有可能考虑到分组
注意:
· 分组函数可以嵌套使用,但是在组函数嵌套使用的时候,不能再出现分组条件的查询语句。