使用mysql语句进行分组查询

1 作用

对整个数据表的某几个字段进行分组,然后通过分组函数得到我们想要的结果

2 如何用

2.1 只分一个组

2.1.1 本质

就是根据分组字段把整个表的数据分为几组,然后分别对每组里面的数据进行汇总查询或者计算

2.1.2 语法

SELECT 分组字段,分组函数(汇总结果字段)
FROM 表名
GROUP BY 分组字段;

2.1.3 示例sql语句

 SELECT deptno,max(sal)FROM empGROUP BY deptno;/*查询出emp(员工表)中每个部门中最高薪水是多少deptno是部门编号的意思,sal是薪水的意思*/

2.1.4 分析过程

a 分组

按照deptno字段可以把emp表分为三组(分组是没有先后顺序的,谁是第一组都行)

分组的数据的标题(EMPNO,ENAME…)实际上只是为了看的更清楚,它实际并不参与分组的

第一组 10,对应的数据如下所示
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
7782 CLARK MANAGER 7839 1981-06-09 2450.00 NULL 10
7839 KING PRESIDENT NULL 1981-11-17 5000.00 NULL 10
7934 MILLER CLERK 7782 1982-01-23 1300.00 NULL 10
第二组 20,对应的数据如下所示
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
7369 SMITH CLERK 7902 1980-12-17 800.00 NULL 20
7566 JONES MANAGER 7839 1981-04-02 2975.00 NULL 20
7788 SCOTT ANALYST 7566 1987-04-19 3000.00 NULL 20
7876 ADAMS CLERK 7788 1987-05-23 1100.00 NULL 20
7902 FORD ANALYST 7566 1981-12-03 3000.00 NULL 20
第三组 30 对应的数据如下所示
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
7499 ALLEN SALESMAN 7698 1981-02-20 1600.00 300.00 30
7521 WARD SALESMAN 7698 1981-02-22 1250.00 500.00 30
7654 MARTIN SALESMAN 7698 1981-09-28 1250.00 1400.00 30
7698 BLAKE MANAGER 7839 1981-05-01 2850.00 NULL 30
7844 TURNER SALESMAN 7698 1981-09-08 1500.00 0.00 30
7900 JAMES CLERK 7698 1981-12-03 950.00 NULL 30
b 找最大值
b.1 第一组 10中的最大值为5000
b.2 第二组 20中的最大值为3000
b.3 第三组 30中的最大值为2850
c 把最大值和对应的分组字段的值作为一个整体进行展示出来
deptno max(sal)
10 5000.00
20 3000.00
30 2850.00

2.1.5 示例sql语句运行截图

2.2 分多个组

2.2.1 语法

SELECT 分组字段1,分组字段2....分组字段n,分组函数(汇总结果字段)
FROM 表名
GROUP BY 分组字段1,分组字段2....分组字段n;

2.2.2 本质

根据分组字段1进行分组,在分好的组里面再用分组字段2进行分组,得到相应的组,然后在相应的组里面再根据分组字段3再一次分组,然后后面就依此类推了

结论:后一个分组字段都是根据前一个分组字段分好的组里面进行再次分组的,其中第一个分组字段是根据整个数据表中的所有数据行进行分组的**,可以粗略理解成第一个分组字段的前一个分组字段分好后的结果就是一组,该组包含数据表中是所有数据行**(默认不写分组的结果就是把表中所有数据行当成一组)

2.1.3 示例sql语句

SELECT deptno,job,max(sal)
FROM emp
GROUP BY deptno,job;/*查询出emp(员工表)中每个部门中每种职位的最高工资deptno是部门编号的意思,sal是薪水的意思*/

2.1.4 分析过程

a 第一次分组

按照deptno字段可以把emp表分为三组,分组的数据的标题(EMPNO,ENAME…)实际上只是为了看的更清楚,它实际并不参与分组的

第一组 10,对应的数据如下所示
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
7782 CLARK MANAGER 7839 1981-06-09 2450.00 NULL 10
7839 KING PRESIDENT NULL 1981-11-17 5000.00 NULL 10
7934 MILLER CLERK 7782 1982-01-23 1300.00 NULL 10
第二组 20,对应的数据如下所示
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
7369 SMITH CLERK 7902 1980-12-17 800.00 NULL 20
7566 JONES MANAGER 7839 1981-04-02 2975.00 NULL 20
7788 SCOTT ANALYST 7566 1987-04-19 3000.00 NULL 20
7876 ADAMS CLERK 7788 1987-05-23 1100.00 NULL 20
7902 FORD ANALYST 7566 1981-12-03 3000.00 NULL 20
第三组 30 对应的数据如下所示
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
7499 ALLEN SALESMAN 7698 1981-02-20 1600.00 300.00 30
7521 WARD SALESMAN 7698 1981-02-22 1250.00 500.00 30
7654 MARTIN SALESMAN 7698 1981-09-28 1250.00 1400.00 30
7698 BLAKE MANAGER 7839 1981-05-01 2850.00 NULL 30
7844 TURNER SALESMAN 7698 1981-09-08 1500.00 0.00 30
7900 JAMES CLERK 7698 1981-12-03 950.00 NULL 30
b 第二次分组

在第一次分好的组的基础上,按照job(职位)的不同进行再次分组

b.1 部门编号为10的组 再次分组的结果如下所示

b.1.1 MANAGER组

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
7782 CLARK MANAGER 7839 1981-06-09 2450.00 NULL 10

b.1.2 PRESIDENT组

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
7839 KING PRESIDENT NULL 1981-11-17 5000.00 NULL 10

b.1.3 CLERK组

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
7934 MILLER CLERK 7782 1982-01-23 1300.00 NULL 10
b.2 部门编号为20的组 再次分组的结果如下所示

b.2.1 ANALYST组

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
7788 SCOTT ANALYST 7566 1987-04-19 3000.00 NULL 20
7902 FORD ANALYST 7566 1981-12-03 3000.00 NULL 20

b.2.2 CLERK组

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
7876 ADAMS CLERK 7788 1987-05-23 1100.00 NULL 20
7369 SMITH CLERK 7902 1980-12-17 800.00 NULL 20

b.2.3 MANAGER组

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
7566 JONES MANAGER 7839 1981-04-02 2975.00 NULL 20
b.3 部门编号为30的组 再次分组的结果如下所示

b.3.1 CLERK组

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
7900 JAMES CLERK 7698 1981-12-03 950.00 NULL 30

b.3.2 MANAGER组

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
7698 BLAKE MANAGER 7839 1981-05-01 2850.00 NULL 30

b.3.3 SALESMAN组

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
7499 ALLEN SALESMAN 7698 1981-02-20 1600.00 300.00 30
7844 TURNER SALESMAN 7698 1981-09-08 1500.00 0.00 30
7521 WARD SALESMAN 7698 1981-02-22 1250.00 500.00 30
7654 MARTIN SALESMAN 7698 1981-09-28 1250.00 1400.00 30
c 找每个部门中每个岗位的最大薪水值
c.1 部门编号为10的部门中

CLERK职位的最高薪水为1300

MANAGER职位的最高薪水是2450

PRESIDENT职位的最高薪水是5000

c.2 部门编号为20的部门中

CLERK职位的最高薪水为1100

MANAGER职位的最高薪水是2975

ANALYST职位的最高薪水是3000

c.2 部门编号为20的部门中

CLERK职位的最高薪水为950

MANAGER职位的最高薪水是2850

SALESMAN职位的最高薪水是1600

d 根据最大值和具体的几个分组字段作为一个整体展示出来
deptno job max(sal)
10 CLERK 1300.00
10 MANAGER 2450.00
10 PRESIDENT 5000.00
20 ANALYST 3000.00
20 CLERK 1100.00
20 MANAGER 2975.00
30 CLERK 950.00
30 MANAGER 2850.00
30 SALESMAN 1600.00

2.1.5 示例sql语句运行截图

3 注意点

3.1 分组的字段有null值,会把该字段所有的null值看成一组

3.1.1 示例sql语句

SELECT product_type
FROM product
GROUP BY product_type;

3.1.2 示例sql语句运行截图

3.2 当有GROUP BY子句时,SELECT子句中只能出现分组字段和分组函数,不能出现非分组字段

3.2.1 分析

因为分组字段进行分组想要查询出来的数据行一般是比原表小的,而SELECT中有非分组字段,非分组字段的数据行是与原表一致,可以明显看出此时非分组字段比分组字段的结果要多了,查询时,就会随机一个非分组字段与分组字段进行匹配,那么这样一来就得不到我们想要的结果了

3.2.2 错误示例sql语句

SELECT product_name,count(product_type) '数量'
FROM product
GROUP BY product_type;

3.2.3 错误示例sql语句运行截图

3.3 GROUP BY子句中不能出现SELECT子句中的别名

3.2.1 分析

GROUP BY子句的执行顺序永远在SELECT 子句之前,在执行GROUP BY子句的时候,你都没有执行SELECT子句,那么哪里会有SELECT子句中的别名给你用呢?要先存在才能用嘛!!!

3.2.2 错误示例sql语句

SELECT product_type '商品种类'
FROM product
GROUP BY '商品种类';

3.2.3 错误示例sql语句运行截图

使用mysql语句进行分组查询相关推荐

  1. mysql按月份分组查询_mysql如何按月份分组查询

    mysql按月份分组查询的方法:根据format字符串格式化date值,语法为[DATE_FORMAT(date,format)],其中[%M ]为月的名字. mysql按月份分组查询的方法:sele ...

  2. SQL语句之分组查询--GROUP BY(group by)

    SQL语句之分组查询–GROUP BY(group by) 语法 select 聚合函数,列(要求出现在group by的后面)from 表where 筛选条件group by 分组的列表order ...

  3. mysql 连接 分组_详解MySQL中的分组查询与连接查询语句

    分组查询 group by group by 属性名 [having 条件表达式][ with rollup] "属性名 "指按照该字段值进行分组:"having 条件表 ...

  4. mysql 连接查询分组_详解MySQL中的分组查询与连接查询语句

    分组查询 group bygroup by 属性名 [having 条件表达式][ with rollup] "属性名 "指按照该字段值进行分组:"having 条件表达 ...

  5. mysql 分组查询 语句_详解MySQL中的分组查询与连接查询语句

    分组查询 group bygroup by 属性名 [having 条件表达式][ with rollup] "属性名 "指按照该字段值进行分组:"having 条件表达 ...

  6. 2020-09-10 MYSQL按时间段分组查询当天,每小时,15分钟数据分组

    查询的需求比较麻烦,根据spreader_id和返回的状态码来判断事件的回传成功率,但是还需要新增时间段的查询,比如产品要的是每15分钟内数据的回传成功率. 这样的话就需要对时间段进行分组查询,我保存 ...

  7. mysql按照学生分组查询_将student表按照gender字段值进行分组查询,并计算每个分组中有多少名学生_学小易找答案...

    [简答题]查询student表中一共有多少条记录 [简答题]在department表和employee表之间分别使用where查询.自连接查询 [简答题]使用DESC查看学生表和班级表 [简答题]在表 ...

  8. mysql数据库如何分组查询_数据库MySQL--分组查询

    分组数据:group by 子句 分组查询语法: select 分组函数,列(要求是出现在group by的后面) from 表 (where 筛选条件)  # where 必须连接from关键字 g ...

  9. 第七期,MySQL如何创建分组查询!!!!

    分组查询 group by 子句 1.group by 子句 使用 group by 子句可以将数据划分到不同的组中,实现对记录的分组查询.group by 从英文字面的意义上可以理解为"根 ...

最新文章

  1. docker容器互联实战
  2. UA MATH567 高维统计II 随机向量9 图的Max-cut问题 0.878近似算法
  3. LaTeX文档插入图片的几种常用方法
  4. SAP UI5里一个包含众多操作的OData请求url实例
  5. python word
  6. 《全数据时代的炼金师》全书语言生动、易懂
  7. Django signal
  8. 自学python买什么教材-Python 有哪些入门学习方法和值得推荐的经典教材?
  9. QT显示图片和中途修改图片
  10. JVM内存大小配置方式
  11. MySQL int类型的显示
  12. MAYA安装包+安装教程
  13. QQ坦白说查看好友方法攻略
  14. Android中的Action和Category常量表
  15. gtx1050ti安装win10和ubuntu16.04双系统
  16. html5源码 母亲节,母亲节H5:非常有创意的5款母亲节H5案例分享
  17. contest 12.31
  18. 托福艺术导向(纪录片《文明》单词总结)PART1
  19. python怎么使用数据库系统有什么好处_数据库简单介绍
  20. 秒云“生活梦想家”计划,从一杯手冲开启

热门文章

  1. 【六一儿童节】回忆一下“童年的记忆”
  2. PTA 神坛 (30 分)
  3. L3-021 神坛 (30分)(图论)
  4. mdm mam mcm 相关
  5. EAS BOS:科目余额表、辅助账余额表
  6. NLP入门(1)-词典分词方法及实战
  7. GridView的一些特殊属性:
  8. 云原生时代(六): 机会与思考
  9. LED显示行业之 屏幕现象分析1
  10. 微型计算机电话系统设计,《智能电力线载波电话系统》-毕业论文(设计).doc...