MySQL 查询语句--------------进阶5:分组查询
#进阶5:分组查询
/*
select 分组函数,列(要求出现在group by的后面)
from 表 【where 筛选条件】 group by 分组的列表 【order by 子句】
注意:
查询列表必须特殊,要求是分组函数和group by后出现的字段
特点:
1.分组查询中的筛选条件分为两类
数据源 位置 关键字
分组前筛选 原始表 group by 前 where
分组后筛选 分组后的结果集 group by 后 having 分组函数做条件,一定是放在having子句之中 group by子句支持单个字段分组,多个字段分组(多个字段之间用逗号隔开没有顺序要求),表达式或者函数(用的较少)
也可以添加排序(排序放在分组查询的最后) */ # 引入:查询每个部门的平均工资
select avg(salary) from employees; #这个是整个表格的基本工资
#需要拆分小组
select avg(salary),department_id from employees group by department_id; #这个结果不太对 select distinct department_id from employees; #案例1:查询每个工种的最高工资
select max(salary),job_id from employees group by job_id; #案例2:查询每个位置上的部门个数
select count(department_id),location_id from departments group by location_id; #添加 分组前 筛选条件
#案例1:查询邮箱中包含a字符的,每个部门的平均工资
select avg(salary),department_id from employees where email like "%a%" group by department_id; #案例2:查询有奖金的每个领导手下员工的最高工资
select max(salary),manager_id from employees where commission_pct is not null group by manager_id; #添加 分组后 的复杂的筛选条件
#案例1:查询哪个部门的员工个数>2
select count(*),department_id from employees where count(*)>2 group by department_id; #这个是错误的,因为employees中没有 count(*)>2
这里使用having
select count(*),department_id from employees group by department_id having count(*)>2 ; #案例2:查询每个工种有奖金的员工,他们的最高工资>12000的工种编号和最高工资
select max(salary),job_id from employees where commission_pct is not null group by job_id; #获得有奖金条件下的,每个工种的最高工工资
# 加上:他们的最高工资>12000的工种编号和最高工资
select max(salary),job_id from employees where commission_pct is not null group by job_id having max(salary)>12000; #案例3:查询领导编号>102的每个领导手下的最低工资>5000的领导编号是哪个,以及其最低的工资
筛选条件:
where manager_id>102
having min(salary)>5000
完整:
select min(salary),manager_id from employees where manager_id>102 group by manager_id having min(salary)>5000; # group by 后跟 表达式或者分组函数(可以不是简单的字段)
#案例:按照员工姓名的长度分组,查询每一组的员工个数,筛选员工个数>5的有哪些
select count(employee_id),length(last_name) from employees group by length(last_name) having count(employee_id)>5; # 按照多个字段分组
#案例:查询每个部门每个工种的员工的平均工资
select avg(salary),department_id,job_id from employees group by department_id,job_id; # 添加排序
#案例:查询每个部门每个工种的员工的平均工资,并且按照平均工资的高低显示
select avg(salary),department_id,job_id from employees group by department_id,job_id order by avg(salary) desc;
order by 后面可以跟函数语句。 #题目1:查询各个job_id的员工工资的最大值、最小值、平均值、总和,并按照job_id升序
select max(salary),min(salary),avg(salary),sum(salary),job_id from employees group by job_id order by job_id asc; #题目2:查询员工最高工资和最低工资的差距(difference)
select max(salary)-min(salary) difference from employees; #题目3:查询各个管理者手下员工的最低工资,其中最低工资不能低于6000,没有管理者的员工不计算在内。
筛选条件:
where manager_id is not null
having min(salary)>=6000
select min(salary),manager_id from employees where manager_id is not null group by manager_id having min(salary)>=6000; #题目4:查询所有部门的编号,员工数量和工资的平均值,并按照平均工资降序
select count(employee_id),avg(salary),department_id from employees group by department_id order by avg(salary) desc; #题目5:选择具有各个job_id的员工人数
select count(*),job_id from employees group by job_id;
MySQL 查询语句--------------进阶5:分组查询的更多相关文章
- MySQL 查询语句--------------进阶7:子查询
#进阶7:子查询 /* 含义: 出现在其他语句中的select语句,称为子查询或者内查询 外部的查询语句,称为主查询或外查询 分类: 按照子查询出现的位置: select后面:只支持标量子查询 fro ...
- MySQL数据库查询操作进阶——多表查询
多表查询 在大部分情况下,我们用到的表都是彼此相关联的,所以我们会有相当大的需求用到跨表的查询,这个时候我们就需要将相关联的表连起来做多表查询. 多表查询分为连表查询和子查询,连表查询即将相关联的表连 ...
- MySQL对数据表进行分组查询
MySQL对数据表进行分组查询(GROUP BY) GROUP BY关键字可以将查询结果按照某个字段或多个字段进行分组.字段中值相等的为一组.基本的语法格式如下: GROUP BY 属性名 [HAVI ...
- MySQL对数据表进行分组查询(GROUP BY)
MySQL对数据表进行分组查询(GROUP BY) GROUP BY关键字可以将查询结果按照某个字段或多个字段进行分组.字段中值相等的为一组.基本的语法格式如下: GROUP BY 属性名 [HAVI ...
- MySQL 查询语句--------------进阶6:连接查询
#进阶6:连接查询 /* 含义:多个表格连接,当查询的字段来自于多个表时候,就会用到连接查询 我觉得这里类似于excel中的vlookup函数 笛卡尔乘积现象:表1有m行,表2有n行,结果有m*n行 ...
- MySQL 查询语句--------------进阶9:联合查询
#进阶9:联合查询 /* union 联合 合并:将多条查询语句的结果合并成一个结果 语法: 查询语句1 union 查询语句2 union..... 应用场景:要查询的结果来自于多个表,且多个表没有 ...
- SEC7 - MySQL 查询语句--------------进阶3:排序查询
# 进阶3:排序查询 /* 引入: select * from employees; 语法: select 查询列表 from 表 [where 筛选条件] order by 排序的列表 asc/de ...
- MySQL全面瓦解10:分组查询和聚合函数
概述 相信我们经常会遇到这样的场景:想要了解双十一天猫购买化妆品的人员中平均消费额度是多少(这可能有利于对商品价格区间的定位):或者不同年龄段的化妆品消费占比是多少(这可能有助于对商品备货量的预估). ...
- MySQL之集合函数与分组查询
这是分组查询用到的语句,也包括了排序以及常用的集合函数
随机推荐
- 教你使用Python制作酷炫二维码
这篇文章讲的是如何利用python制作狂拽酷炫吊炸天的二维码,非常有趣哦! 可能你见过的二维码大多长这样: 普普通通,平平凡凡,没什么特色... 但,如果二维码长这样呢! 或者 这样! 是不是炒鸡好看 ...
- 2019 Multi-University Training Contest 1 - 1001 - Blank - dp
http://acm.hdu.edu.cn/showproblem.php?pid=6578 不会做,看题解. 设dp[i][j][k][l]表示4种颜色出现的最后的位置分别是i,j,k,l的方法数, ...
- 3183 RMQ / 贪心(坑成。。)
题意:删去m个数,使剩下的数组成的数最小 题解 :贪心 , RMQ RMQ解法,建st表找,用rmq找最小值的下标,注意点 ,因为最小值是区间最右最小值,所以应该改成 <= 而不是< mi ...
- 【问题解决方案】GitHub上克隆项目到本地
说明: 克隆线上项目到本地,可以直接clone克隆,不必再自己建文件夹啊,初始化啊. 命令: git clone + 想要克隆的项目的地址 END
- 20191126PHP连接数据(1)
引进数据 mysql> create database stu1 character set utf8; mysql> use stu1 mysql> set names utf8; ...
- python连接mariadb报错解决1045, "Access denied for user 'root'@'192.168.0.50' (using password: YES)
[root@localhost ~]# python Python 2.7.5 (default, Apr 11 2018, 07:36:10) [GCC 4.8.5 20150623 (Red Ha ...
- 2018-2-13-Windows-10-16251-添加的-api
title author date CreateTime categories Windows 10 16251 添加的 api lindexi 2018-2-13 17:23:3 +0800 201 ...
- JS删除对象中的某一属性(delete)
var obj= {} 1.JS对象添加新属性 obj.address="shenzhen" 2.JS删除对象中的某一属性(delete) var obj= { height: , ...
- python if-else替代三元表达式
python中判断一个数是否是偶数的常规代码: def _compare(data): if data % 2 == 0: return True else: return False # 调用偶数判 ...
- java四种引用类型以及使用场景详解
每种编程语言都有自己操作内存中元素的方式,例如在 C 和 C++ 里是通过指针,而在 Java 中则是通过“引用”.在 Java 中一切都被视为了对象,但是我们操作的标识符实际上是对象的一个引用(re ...