MYSQL(分组函数,分组查询)
目录
分组函数
简单使用
支持的参数类型
sum,avg
max,min
count
是否忽略null
sum,avg
min,max
count
案例
分组查询
引入
添加筛选条件
添加分组后的筛选(having)
按多个字段分组
添加排序
案例
分组函数
功能:做统计使用,又称为聚合函数,统计函数或组函数。
分类:
sum 求和
avg 平均值
max 最大值
min 最小值
count 计算个数
特点:1.sum,avg一般用于处理数值型。max,min,count可以用于处理任何类型。
2.以上分组函数都忽略null值
3.可以和distinct搭配实现去重运算
5.和分组函数一同查询的字段要求是group by 后的字段
简单使用
#简单使用
SELECT SUM(salary)FROM employees;
SELECT AVG(salary)FROM employees;
SELECT MIN(salary)FROM employees;
SELECT MAX(salary)FROM employees;
SELECT COUNT(salary)FROM employees;
SELECT SUM(salary) 和,ROUND(AVG(salary),2) 平均值,
MIN(salary) 最小值,MAX(salary) 最大值,COUNT(salary) 数量
FROM employees;
支持的参数类型
sum,avg
#支持的参数类型
SELECT SUM(last_name),AVG(last_name)
FROM employees;#结果为0,0
SELECT SUM(hiredate),AVG(hiredate)
FROM employees;#结果不为0
max,min
SELECT MAX(last_name),MIN(last_name)
FROM employees;#结果为姓名
SELECT MAX(hiredate),MIN(hiredate)
FROM employees;#结果为日期
count
SELECT COUNT(last_name)
FROM employees;#107
SELECT COUNT(commission_pct)
FROM employees;#35
是否忽略null
sum,avg
#是否忽略null
SELECT SUM(commission_pct),AVG(commission_pct),
SUM(commission_pct)/35,SUM(commission_pct)/107
FROM employees;
#sum忽略null
min,max
SELECT MAX(commission_pct),MIN(commission_pct)
FROM employees;
#max,min忽略null
count
SELECT COUNT(commission_pct)
FROM employees;
#count忽略null
案例
#查询员工表中最大入职时间和最小入职时间的相差天数
SELECT MAX(hiredate) 最大入职时间,
MIN(hiredate) 最小入职时间,
DATEDIFF(MAX(hiredate),MIN(hiredate)) 相差天数
FROM employees;
#查询部门编号为90的员工个数
SELECT COUNT(*)
FROM employees
WHERE department_id=90;
分组查询
语法:
select 分组函数,列(要求出现在group by的后面)
from 表
where 筛选条件
group by 分组的列表
order by 子句
注意:
查询列表必须特殊,要求是分组函数和group by后出现的字段
特点:
1.分组函数条件是放在having子句中
2.能用分组前筛选的,优先考虑分组前筛选
引入
#每个部门的平均工资
SELECT AVG(salary) 平均工资,`department_id`
FROM employees
GROUP BY department_id;
#查询每个工种的最高工资
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;
添加分组后的筛选(having)
注意:having后不能接别名,
where后不能加别名
别名不能用于判断
#添加分组后的筛选(having)
#查询哪个部门的员工个数大于2
SELECT COUNT(*),department_id
FROM employees
GROUP BY department_id
HAVING COUNT(*)>2;
#查询每个工种有奖金的,最高工资>12000的员工的最高工资和工种编号
SELECT MAX(salary) 最高工资,job_id 工种编号
FROM employees
WHERE commission_pct IS NOT NULL
GROUP BY 工种编号
HAVING MAX(salary)>12000;
#查询领导编号>102的每个领导手下,
#最低工资>5000的员工的
#领导编号和最低工资
SELECT MIN(salary) 最低工资,manager_id 领导编号
FROM employees
WHERE manager_id>102
GROUP BY 领导编号
HAVING MIN(salary);
#案例:按员工姓名长度分组,
#查询每一组的员工个数,
#筛选员工个数>5的有哪些
SELECT COUNT(*),LENGTH(last_name)
FROM employees
GROUP BY LENGTH(last_name)
HAVING COUNT(*)>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 job_id,department_id
ORDER BY AVG(salary) DESC;
案例
#查询各工种员工工资的最大值,最小值,平均值,总和
#并按工种号升序
SELECT MAX(salary),MIN(salary),AVG(salary),SUM(salary),job_id
FROM employees
GROUP BY job_id
ORDER BY job_id ASC;
#查询最高工资和最低工资的差距
SELECT MAX(salary),MIN(salary),MAX(salary)-MIN(salary) 差距
FROM employees;
#查询各个管理员手下员工的最低工资,
#最低工资不能低于6000,
#没有管理员的不计算在内
SELECT MIN(salary),manager_id
FROM employees
WHERE manager_id IS NOT NULL
GROUP BY manager_id
HAVING MIN(salary)>=6000;
#查询所有部门的编号,员工数量,工资平均值
#按工资平均值降序
SELECT department_id,COUNT(*),AVG(salary)
FROM employees
GROUP BY department_id
ORDER BY AVG(salary) DESC;
#具有各个job_id的员工个数
SELECT COUNT(*),job_id
FROM employees
GROUP BY job_id;
MYSQL(分组函数,分组查询)相关推荐
- mysql LOCATE() 函数 模糊查询,类似like %%
mysql LOCATE() 函数 模糊查询,类似like '%%' 查询的字符串 前面添加 BINARY ,区分大小写 SELECT * FROM `ce1` WHERE locate(BINARY ...
- mysql自定义函数分组_mysql中的排序和分组及分组函数
现实中有很多这样的需求,对全班同学成绩进行排名,将所有的学生信息按照班级来分组,先将学生按班级分组再进行成绩排名等等.今天老韩就来介绍一下如何通过数据库的排序.分组.分组排序来实现这个需求(是排序,不 ...
- mysql offset函数_mysql查询语句解析
原标题:mysql查询语句解析 一.查询基本知识 select 列1,列2,...,列n from 表名 1.条件查询:where ①比较运算符:=.!=.< >.<= .>= ...
- MYSQL 自定义函数,查询节点所有父节点、查询节点所有子节点
一.查询所有父节点. 1.sql代码 select getParentIdList(3402) 2.创建函数 CREATE FUNCTION `getParentIdList`(rootId INT) ...
- 数据库MySQL常见函数(含分组函数与复杂分组查询)
文章目录 一.常见函数介绍 1. 概念: 2.好处: 3.调用格式: 4.分类: 二.单行函数 1.字符函数: 2.数学函数: 3.日期函数 4.其他函数 5.流程控制函数 二.分组函数 1.概念 2 ...
- Mysql进阶学习(四)分组函数与分组查询
Mysql进阶学习(四)分组函数与分组查询 一.进阶4:分组函数 1.简单的使用 1.1 SUM 求和 1.2 AVG 求平均值 1.3MIN 最小值 1.4 MAX 最大值 1.5 COUNT求总数 ...
- MySQL学习-排序与分组函数
操作的表 mysql> select * from emp; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO 7369 SMITH CLERK 7902 ...
- SQL语法之分组函数,分组查询(进阶5)and连接查询(sql92语法进阶6)
SQL语法体系学习笔记 SQL语法之基础查询(进阶1)and条件查询(进阶2) SQL语法之排序查询(进阶3)and常见函数(进阶4) SQL语法之分组函数,分组查询(进阶5)and连接查询(sql9 ...
- mysql常用的分组函数
/* 功能:用作统计使用,又称为聚合函数或统计函数或组函数 分类: sum 求和.avg 平均值.max 最大值 .min 最小值 .count 计算个数 特点: 1.sum.avg一般用于处理数值型 ...
最新文章
- 多模态商品推荐与认知智能背后的数学
- 小学生python入门-写给中小学老师们的Python入门指引
- Python中列表的介绍以及常见操作
- 忘记手机绑定过的UC/交易猫账号怎么找回
- Nginx+win10安装配置
- 敏感词过滤的php代码,php实现敏感词过滤(Trie树)
- web前端基础(14html里面的事件)
- D37 682. Baseball Game
- 梅西、内马尔谁是全能的五边形战士?教你用BI做出可视化能力图
- 优化算法之——最速下降法
- 非华为电脑安装华为电脑管家步骤
- CrossApp 0.4.2 发布,隆重推出 WebView
- [油猴脚本开发指南]第一个脚本-HelloWorld
- namecheap 邮件服务器,NameCheap域名邮局/企业邮局开通与初始设置
- mac os x 使用教程_如何在Mac OS X计算机上使用扫描仪
- C++基础算法 | 单调栈(Monotonous Stack)
- Fiddler抓包软件[一]下载与安装
- 达内 Java 全套教程 NPM、PYPI、DockerHub 备
- 【Hadoop大数据分析与挖掘实战】(一)----------P19~22
- 1.搭建Java+Selenium+WebDriver测试环境