GROUP BY子句
GROUP BY 子句用于根据一个或多个列对结果集进行分组;
在ORDER BY和GROUP BY子句中引用列,可以通过列名称、别名或者位置实现,列位置从1开始编号;
-- 统计图书的分类信息
SELECT categoryname FROM t13 GROUP BY categoryname;
-- 统计图书的出版社信息
SELECT publlshingname FROM t13 GROUP BY publlshingname;
-- 统计每个图书分类包含的图书数量
SELECT categoryname,COUNT(id) AS num FROM t13 GROUP BY categoryname;
-- 统计每个出版社出版的图书数量
SELECT publlshingname,COUNT(id) AS num FROM t13 GROUP BY publlshingname;
-- 统计每个出版社出版的图书数量,并且按数量降序排序
SELECT publlshingname,COUNT(id) AS num FROM t13
GROUP BY publlshingname
ORDER BY num DESC;
-- 查询emp表中,员工总数、工资总和、平均工资、最低工资、最高工资,并起别名显示
SELECT COUNT(*) 员工总数,SUM(sal) 工资总和,AVG(sal) 平均工资,MIN(sal) 最低工资,MAX(sal) 最高工资 FROM emp;
-- 查询emp表中,每个部门的编号(deptno),部门的人数,部门的最高工资
-- 分析:30号部门的人数--->将30号部门的人变到一起---->分组--->选择列
SELECT deptno,COUNT(*),MAX(sal)
FROM emp
GROUP BY deptno;
-- 查询emp表中,每个职位(job)的名称,每个职位的人数,每个职位的最高工资
SELECT job,COUNT(*),MAX(sal)
FROM emp
GROUP BY job;
-- 查询emp表中,工资大于1000的,每个部门的编号(deptno),部门的人数,部门的工资总和
SELECT deptno,COUNT(*),SUM(sal) -- 4
FROM emp -- 1
WHERE sal > 1000 -- 2
GROUP BY deptno; -- 3
-- 查询emp表中,工资大于1000的,每个部门的编号(deptno),部门的人数,部门的工资总和,根据工资总和升序排列
SELECT deptno,COUNT(*),SUM(sal)
FROM emp
WHERE sal > 1000
GROUP BY deptno
ORDER BY SUM(sal) ASC;
-- 查询emp表中,工资在1000~5000之间的,每个部门的编号(deptno),部门的人数,部门的平均工资,根据部门的编号降序排列
SELECT deptno,COUNT(*),AVG(sal)
FROM emp
WHERE sal BETWEEN 1000 AND 5000
GROUP BY deptno
ORDER BY deptno DESC;
-- 查询emp表中,员工姓名(ename)不包含字母C的,每个职位的名称,每个职位(job)的人数,每个职位的最低工资,根据人数升序排列
SELECT job,COUNT(*),MIN(sal)
FROM emp
WHERE NOT ename LIKE '%C%'
GROUP BY job
ORDER BY COUNT(*) ASC;
-- 查询student表中,分数(score)大于70分的,每个班级(sclASs)的名称,班级的人数,班级的最高分数,根据班级人数降序排列
SELECT sclASs,COUNT(*),MAX(score)
FROM student
WHERE score > 70
GROUP BY sclASs
ORDER BY COUNT(*) DESC;