0
点赞
收藏
分享

微信扫一扫

MySQL 分组函数与分组查询

孟祥忠诗歌 2022-05-02 阅读 103

目录

#二 分组函数

#进阶五 分组查询


#二 分组函数


/*
分类 :
sum 
avg
max
min
count 计算个数
功能 统计

*/
#darediff 日期相差天数

SELECT DATEDIFF(MAX(hiredate),MIN(hiredate))
FROM employees;

SELECT SUM(salary) FROM employees;
SELECT AVG(salary) FROM employees;
SELECT MAX(salary) FROM employees;
SELECT COUNT(salary) FROM employees;


#可以一次查询多个 和嵌套搭配其他函数

SELECT SUM(salary) he, MAX(salary) zuida FROM employees;

#1参数支持哪些类型

# sum avg 参数 数值类型
# max min   connt 全部支持 count统计不为null 的个数 

#2以上分组函数全部忽略null 值

#3可以和distinct 搭配实现去重

SELECT COUNT(DISTINCT salary) FROM employees;

#4 count 单独介绍 4重载

SELECT COUNT(*) FROM employees;#统计总行数
SELECT COUNT(1) FROM employees;#传入常量值,相当于加了一列常量值,统计行数
SELECT COUNT('sdf') FROM employees;
SELECT COUNT(salary) FROM employees;

#count(*)效率最高

#和分组函数一同查询的字段有限制,要求是 group by后的字段

#进阶五 分组查询

/*

语法
select 分组函数 ,列(要求出现在 groupby后面)
from 表
group by 分组的列表
order by 字句
*/
#每个公众的最高工资

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;

#复杂筛选条件 添加分组后的筛选 having ,原始表中有的字段可以用where查询,
#否则分组后用having
#哪个部门员工数量>2

SELECT COUNT(*) ,department_id
FROM employees
GROUP BY department_id
HAVING COUNT(*)>2;


/*
分组查询筛选条件分为两类
 分组前   原始表       group by前       where
 分组后筛选  分组后结果集   group by 后      having

分组函数做条件 肯定放在having子句中
*/

#按表达式或函数分组
# 按员工姓名长度分组 查询每一组员工个数 筛选大于5 的有哪些

SELECT  COUNT(*) ,LENGTH(last_name) las
FROM employees 
GROUP BY  las #这里可以用别名
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 department_id,job_id
HAVING AVG(salary)>10000
ORDER BY AVG(salary) DESC;
举报

相关推荐

0 条评论