Mysql数据库基础系列

软件下载地址
提取码:7v7u
数据下载地址
提取码:e6p9
mysql数据库基础第一章:(一)数据库基本概念
mysql数据库基础第一章:(二)mysql环境搭建
mysql数据库基础第二章:(一)基础查询
mysql数据库基础第二章:(二)条件查询
mysql数据库基础第二章:(三)排序查询
mysql数据库基础第二章:(四)常见函数
mysql数据库基础第二章:(五)分组查询
mysql数据库基础第二章:(六)连接查询
mysql数据库基础第二章:(七)子查询
mysql数据库基础第二章:(八)子查询经典案例
mysql数据库基础第二章:(九)分页查询
mysql数据库基础第二章:(十)连接查询
mysql数据库基础第三章:DML语言
mysql数据库基础第四章:DDL(数据定义语言):库表的管理、数据类型与约束条件
mysql数据库基础第五章:(一)事务
mysql数据库基础第五章:(二)视图
mysql数据库基础第六章:变量、存储过程与函数
mysql数据库基础第七章:流程控制结构
mysql数据库基础第八章:窗口函数和公用表达式(CTE)



一、基本语法

select column, group_function(column)
from table
[where condition]
[group by group_by_expression]
[order by column];
[]:表示可省略

在做筛选条件时,如果是在分组前删选,则用where如果是在分组后筛选,则用having。

二、案例

2.1简单的分组查询


# 1.查询每个工种的最高工资
SELECT
MAX(salary),
job_id
FROM
employees
GROUP BY job_id ; # 2.查询每个位置上的部门个数
SELECT COUNT(*), location_id
FROM departments
GROUP BY department_id;

2.2 添加筛选条件的分组查询(分组前)

简单的添加删选条件使用在分组前使用where,具体如下

#1.查询邮箱中包含a字符的每个部门的平均工资
SELECT
AVG(salary)
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 ;

2.3 分组后的删选条件

分组后的删选条件使用having

# 1.查询哪个部门的员工个数>2
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
HAVING MAX(salary) > 12000 ;

2.4按表达式分组

# 按员工姓名的长度分组,查询每一组的员工个数,删选员工个数>5的
SELECT
COUNT(*),
LENGTH(last_name)
FROM
employees
GROUP BY LENGTH(last_name)
HAVING COUNT(*) > 5 ;

2.5 按多个字段排序

# 查询每个部门每个工种员工的平均工资
SELECT AVG(salary), department_id, job_id
FROM employees
GROUP BY department_id,job_id;

2.6 添加排序

# 查询每个部门每个工种员工的平均工资,按平均工资降序排序
SELECT
AVG(salary),
department_id,
job_id
FROM
employees
GROUP BY department_id,
job_id
ORDER BY AVG(salary) DESC ;

总结:如果删选条件在分组前,使用where关键字,

如果删选条件在分组后,使用haing关键字
分组函数做条件直接放在having子句中。

三、练习

###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. 查询员工最高工资和最低工资的差距(DIFFERENCE)
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 ;

最新文章

  1. 用原始方法解析复杂字符串,json一定要用JsonMapper么?
  2. Oracle跟踪文件
  3. 基于CkEditor实现.net在线开发之路(2)编写C#代码,怎么调用它。
  4. C#开发中Windows域认证登录2(扩展吉日嘎拉GPM系统)
  5. 三部曲二(基本算法、动态规划、搜索)-1004-Instant Complexity
  6. java生成解析xml的另外两种方法JAXB
  7. 转 SQL Server中关于的checkpoint使用说明
  8. [Hibernate] - many to one
  9. bzoj3389:[Usaco2004 Dec]Cleaning Shifts安排值班
  10. SPRING IN ACTION 第4版笔记-第一章-002-DI介绍
  11. jQuery运维开发之第十七天
  12. java设计模式--结构型模式--桥接模式
  13. Floyd算法(弗洛伊德算法)
  14. Open-Falcon 监控系统监控 MySQL/Redis/MongoDB 状态监控
  15. YYHS-挑战nbc
  16. 很实用的php的缓存类文件示例
  17. PHP微信开发之模板消息回复
  18. js中的object
  19. Hue添加Spark notebook
  20. 固态硬盘使用简要手册——windows平台

热门文章

  1. Minio--docker部署
  2. mysql 5.7 gtid 主从复制
  3. element的upload手动submit前动态设置上传请求地址
  4. VM部署服务后设置局域网内其他人访问
  5. Advanced Rest Client 测试工具安装
  6. for/in 语句用于循环对象属性
  7. springboot文件流下载
  8. 阐述智能站变电站时钟同步系统(NTP时间同步服务器)的意义
  9. Android自动化用例编写
  10. vue 简单原理