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