1、数据分组函数:max / min /avg /sum /count
显示所有员工中最高工资和最低工资:select max(sal),min(sal) from emp;
显示所有员工中最高工资及其对应的员工名: select ename,sal from emp where sal=( select max(sal) from emp);
显示所有员工的平均工资:select avg(sal) from emp;
显示工资低于平均工资的员工信息:select * from emp where sal<(select avg(sal) from emp);
显示所有员工的工资总和:select sum(sal) from emp;
显示共有多少员工: select count(*) from emp;
COUNT(*)返回表的所有纪录数,而COUNT(expression)则返回符合表达式计算结果的非空纪录数。通常情况下,COUNT(DISTINCT expression)将相同的纪录只计算为一个。
2、group by 和 having子句
group by:用于对查询的结果分组统计
显示每个部门的平均工资和最高工资:
select avg(sal),max(sal),deptno from emp group by deptno ;
显示每个部门的每种岗位的平均工资和最低工资:
select avg(sal),min(sal),deptno,job from emp group by deptno,job ;
having子句:用于限制分组显示结果
显示平均工资低于2000的部门号和他的平均工资:
select avg(sal),max(sal),deptno from emp group by deptno having avg(sal)>2000 ;
数据分组的总结:
(1)分组函数只能出现在选择列表、having、order by子句中
(2)如果在select语句中同时包含有group by、having 、order by,那么他们的顺序是:
group by、having 、order by;
(3)在选择列中如果有列、表达式和分组函数,那么这些列和表达式必须有一个出现在
group by 子句中,否则会出错;
eg: select deptno,avg(sal),max(sal) from emo group by deptno having avg(sal)>2000 order by avg(sal);
3、多表查询:
显示雇员名、雇员工资以及所在部门的名字:
select a1.ename,a1.sal,a1.dname from emp a1,dept a2 where a1.deptno=a2.deptno;