MySQL42--GROUP BY子句

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;
posted @ 2021-10-24 16:21  暄总-tester  阅读(181)  评论(0)    收藏  举报