分组统计查询
概念:
将所有具有相同分组字段的知记录放到一个分组里。
基本语法:
4→SELECT *
1→ FROM 数据来源,数据来源···
2→ WHERE 过滤条件
3→ GROUP BY 分组字段
5→ ORDER BY 排序字段 ASC|DESC {排序方式(按照指定字段进行升序或者降序显示)}
查询出每个职位的平均工资
SELECT AVG(sal)
FROM emp
GROUP BY job;
查询出每个部门的名称及其人数
SELECT dname,COUNT(*) 人数
FROM emp e INNER JOIN dept d ON e.deptno=d.deptno
GROUP BY dname;
统计出每个职位的名称、人数、平均工资
SELECT job,COUNT(*) 人数 ,AVG(sal) 平均工资
FROM emp
GROUP BY job;
查询出每个部门的名称、人数、以及 每个部门的雇员的最高和最低工资
SELECT dname,COUNT(*) 人数,MAX(sal) 最高工资,MIN(sal) 最低工资
FROM emp e INNER JOIN dept d ON e.deptno=d.deptno
GROUP BY dname;
使用统计函数要注意问题
1.如果SELECT 字句中使用了统计函数同时没有GROUP BY 子句那么SELECT 子句只能出现统计函数,不能出现其他任何字段。
观察如下代码:
SELECT empno,job,AVG(sal)
FROM emp;
运行结果如下:
2.如果SELECT 字句中使用了统计函数同时有GROUP BY 子句则在SELECT 子句中只能出现统计函数和分组的字段。
观察如下代码:
SELECT empno,job,AVG(sal)
FROM emp
GROUP BY job;
运行结果如下:
3.如果SELECT 字句中使用了嵌套的统计函数,则不管是否有GROUP BY 子句那么SELECT 字句中不能出现统计函数之外任何字段。
观察如下代码:
SELECT job,MAX(AVG(sal))
FROM emp
GROUP BY job;
运行结果如下:
正确的代码运行结果如下: