MySQL——分组查询

2023.9.4

MySQL 分组查询的学习笔记如下:

sql 复制代码
#分组查询
/*
分组查询中的筛选条件分为两类:
	      数据源		   位置		   关键字
分组前筛选    原始表           group by前面        where
分组后筛选    分组后的结果集   group by后面        having
*/
#查询每个工种的最高工资
SELECT MAX(salary),`job_id` FROM `employees` GROUP BY `job_id`;
#查询每个位置上的部门个数
SELECT COUNT(*),`location_id` FROM `departments` GROUP BY `location_id`;
#查询邮箱中包含a字符的,每个部门的平均工资。
SELECT AVG(salary),`department_id` FROM `employees` WHERE email LIKE '%a%' GROUP BY `department_id`;
#查询有奖金的每个领导手下员工的最高工资
SELECT MAX(salary),`manager_id` FROM `employees` WHERE `commission_pct` IS NOT NULL GROUP BY `manager_id`;
#查询哪个部门的员工个数>2
SELECT COUNT(*),`department_id` FROM `employees` GROUP BY `department_id` HAVING COUNT(*)>2;
#查询每个工种有奖金的员工的最高工资
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;
#查询领导编号>102的每个领导手下的最低工资>5000的领导编号是哪个,以及其最低工资。
SELECT `manager_id`,MIN(salary) FROM `employees` WHERE `manager_id`>102 GROUP BY `manager_id` HAVING MIN(salary)>5000;
#按员工姓名的长度分组,查询每一组的员工个数,筛选员工个数>5的有哪些。
SELECT LENGTH(`last_name`),COUNT(*) FROM `employees` GROUP BY LENGTH(`last_name`) HAVING COUNT(*)>5;
#查询每个部门每个工种的员工的平均工资,并按平均工资的高低显示。
SELECT `department_id`,`job_id`,AVG(salary) FROM `employees` GROUP BY `department_id`,`job_id` ORDER BY AVG(salary) DESC;

课后习题:

sql 复制代码
#1、查询各job_id的员工工资的最大值,最小值,平均值,总和。并按job_id升序
SELECT `job_id`,MAX(salary),MIN(salary),AVG(salary),SUM(salary) FROM `employees` GROUP BY `job_id` ORDER BY `job_id` ASC;
#2、查询员工最高工资和最低工资的差距
SELECT MAX(salary)-MIN(salary)  FROM `employees`;
#3、查询各个管理者手下员工的最低工资,其中最低工资不能低于6000,没有管理者的员工不计算在内。
SELECT `manager_id`,MIN(salary) FROM `employees` WHERE `manager_id` IS NOT NULL GROUP BY `manager_id`  HAVING MIN(salary)>=6000;
#4、查询所有部门的编号,员工数量和工资平均值,并按平均工资降序。
SELECT `department_id`,COUNT(*),AVG(salary) FROM `employees` GROUP BY `department_id` ORDER BY AVG(salary) DESC;
#5、选择具有各个job_id的员工人数
SELECT COUNT(*),`job_id` FROM `employees` GROUP BY `job_id` ;
相关推荐
win x2 分钟前
Redis 使用~如何在Java中连接使用redis
java·数据库·redis
迷枫7121 小时前
DM8 数据库安装实战:从零搭建达梦数据库环境(附全套工具链接)
数据库
XDHCOM1 小时前
PostgreSQL 25001: active_sql_transaction 报错原因分析,故障修复步骤详解,远程处理解决方案
数据库·sql·postgresql
卤炖阑尾炎2 小时前
PostgreSQL 日常运维全指南:从基础操作到备份恢复
运维·数据库·postgresql
daad7773 小时前
wifi_note
运维·服务器·数据库
计算机毕设vx_bysj68693 小时前
【免费领源码】77196基于java的手机银行app管理系统的设计与实现 计算机毕业设计项目推荐上万套实战教程JAVA,node.js,C++、python、大屏数据可视化
java·mysql·智能手机·课程设计
吴声子夜歌3 小时前
ES6——正则的扩展详解
前端·mysql·es6
xixingzhe23 小时前
Mysql统计空间增量
数据库·mysql
程序员萌萌3 小时前
Java之mysql实战讲解(三):聚簇索引与非聚簇索引
java·mysql·聚簇索引
程序员萌萌4 小时前
Redis的缓存机制和淘汰策略详解
数据库·redis·缓存机制·淘汰策略