MySQL分组查询 您所在的位置:网站首页 sql增加排序字段怎么弄 MySQL分组查询

MySQL分组查询

#MySQL分组查询| 来源: 网络整理| 查看: 265

MySQL分组查询

分组数据: group by子句                    可以使用group by子句将表中的数据分成若干组 语法:         select 分组函数,列(分组查询搭配分组函数使用,要求列要出现在group by后面)         from 表        【where 筛选条件】         group by 表达式        【order by 字段】 在这里插入图片描述 注:         查询列表比较特殊,要求是分组函数和group by 后出现的字段,         where一定要放在from后面 。

特点:

1.   分组查询中的筛选条件分为两类:       注:          ①分组函数做条件放在having子句中          ②能用分组前筛选的,优先考虑使用分组前筛选

数据源(针对的表)位置关键字分组前筛选:原始表group by的前面where分组后筛选:分组后的结果集group by的后面having

2.   group by子句支持单个字段分组、多个字段分组(多个字段之间用逗号隔开没有顺序要求)、表达式或函数(相对前两种不常用) 3.   也可以添加排序(排序放在整个分组查询的最后)

一. 简单查询 :

1.查询每个工种的最高工资 在这里插入图片描述 2.查询每个位置上的部门个数 在这里插入图片描述

二. 添加筛选条件 :

1.查询邮箱中包含a字符的,每个部门的平均工资 在这里插入图片描述

2.查询每个领导手下有奖金的员工最高工资 在这里插入图片描述

注:以上两个筛选条件涉及的(where后面的)字段都来自原始表(from后面的表)

三. 添加复杂筛选条件 :

1.查询部门的员工个数>2

第①步: 查询每个部门的员工个数 在这里插入图片描述 第②步 :根据①的结果进行筛选,查询部门的员工个数>2的(因为根据原始表是无法筛选的) 在这里插入图片描述 如果筛选条件跟在from后使用是不能执行的( 因为count(*)此字段不在employees表内 )对分组函数无效使用,报错! 应该根据分组后再筛选(执行完group by子句再筛选),那么需要追加having. 在这里插入图片描述 # where过滤行 having过滤分组 #

       Where 是个约束声明在查询数据库的结果返回之前对数据库中的查询条件进行约束,即在结果返回之前起作用,且where后面不能使用“聚合函数”

       Having是个过滤声明,所谓过滤是在查询数据库的结果返回之后进行过滤,即在结果返回之后起作用,并且having后面可以使用“聚合函数”

       简而言之where出结果前用,having出结果后筛选用

2.查询每个工种有奖金的员工的最高工资>12000的工种编号和最高工资

首先是查询有奖金的员工,进行分组,最后筛选出最高工资大于12000 第①步 : 查询每个工种有奖金的员工的最高工资 在这里插入图片描述 第②步 :根据①的结果继续筛选,最高工资>12000 在这里插入图片描述

3.查询领导编号>140的领导编号以及手下员工最低工资,要求他手下员工最低工资>5000 第①步 :查询每个领导手下的员工的最低工资 在这里插入图片描述 第②步 :添加筛选条件:编号>140 在这里插入图片描述 第③步: 添加筛选条件:最低工资>5000 在这里插入图片描述

四. 按表达式或函数分组 :

按员工姓名的长度分组,查询每一组的员工个数,筛选员工个>20的有哪些 在这里插入图片描述 在这里插入图片描述 注:     MySQL中支持group by子句和having子句跟别名(Oracle中不支持)     但where后面不支持.

五. 按多个字段分组 :

查询每个部门每个工种的员工的平均工资 在这里插入图片描述 注:     group by后面的department_id和job_id一样的才能在一个组,     group by后面的多个字段可以调换顺序

六. 添加排序 :

查询每个部门每个工种的员工的平均工资,并且按平均工资的高低显示,要求部门编号不为空且平均工资>20000 在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有