Day33

这周六日要去练科三,没时间学习了应该。周一接着学。MySQL下个星期学完基础

Day33

学MySQL的第三天

分组函数

#分组函数

/*
功能:用作统计使用,又称为聚合函数或统计函数或组函数

sum(字段名):求和
avg(字段名):求平均数
max(字段名);求最大值
min(字段名):求最小值
count(字段名):计算非空字段值的个数


*/

#案例一:查询员工信息表中,所有员工的工资和、平均值、最低工资、最高工资、有工资的个数

SELECT SUM(salary) 工资和,MIN(salary) 最低工资,MAX(salary) 最高工资,
AVG(salary) 工资平均值,COUNT(salary) 有工资的个数
FROM employees

#案例二:1、查询emp表中记录数:
SELECT COUNT(employee_id)
FROM employees

# 2、查询emp表中有佣金的个数
SELECT COUNT(salary)
FROM employees

# 3、查询emp表中月薪大于2500的人数
SELECT COUNT(salary)
FROM employees
WHERE salary>2500
# 4、查询有领导的个数
SELECT COUNT(manager_id)
FROM employees

# 每个部门的总工资,平均工资
SELECT department_id,SUM(salary),AVG(salary)
FROM employees
GROUP BY department_id


# count补充
#1、统计结果集的行数,推荐用count(*)
SELECT COUNT(*) FROM employees
#这两个功能都一样。
SELECT COUNT(1) FROM employees

#2、搭配distinct实现去重的统计
#需求、查询有员工的部门有个数
SELECT COUNT(DISTINCT department_id)
CASE deparment_id
WHEN
FROM employees

================================================================

分组查询

#================================================================
#分组查询

/*
语法:

select 查询列表
from 表
【where 筛选条件】
group by 分组的字段
【order by 排序的字段】

执行顺序
from子句
where子句
group by子句
having子句
select子句
orderby子句


特点:
1、查询列表往往是 分组函数和被分组的字段!!!
2、
1、和分组函数一同查询的字段必须是group by后出现的字段
2、筛选分为两类:分组前筛选和分组后筛选
分组前筛选用where.只看到原来的表
分组后用having.能看见分组后的表.
分组前   原始表               where   group by 前面
分组后   分组后的结果集       having group by 后面




/*
1. 查询各 job_id 的员工工资的最大值,最小值,平均值,总和,并按 job_id 升序
2. 查询员工最高工资和最低工资的差距(DIFFERENCE)
3. 查询各个管理者手下员工的最低工资,其中最低工资不能低于 6000,没有管理者的员
工不计算在内
4. 查询所有部门的编号,员工数量和工资平均值,并按平均工资降序
5. 选择具有各个 job_id 的员工人数
*/

#1.简单的分组
#案例1:查询每个工种的员工平均工资
SELECT job_id,AVG(salary)
FROM employees
GROUP BY job_id
#案例2:查询每个领导的手下员工个数
SELECT manager_id,COUNT(*)
FROM employees
WHERE manager_id IS NOT NULL
GROUP BY manager_id

#2.实现分组前的筛选
#案例1:查询邮箱中包含a字符的 每个部门的最高工资
SELECT department_id,MAX(salary) 最高工资
FROM employees
WHERE email LIKE '%a%' AND department_id IS NOT NULL
GROUP BY department_id

#案例2:查询有奖金的每个领导手下员工的平均工资
SELECT manager_id,commission_pct,AVG(salary) 平均工资
FROM employees
WHERE commission_pct IS NOT NULL
GROUP BY manager_id

#3.实现分组后的筛选--用having.
#案例1:查询哪个部门的员工个数大于5
#select 执行顺序后于 where.
SELECT department_id,COUNT(*) 员工个数
FROM employees
GROUP BY department_id
HAVING COUNT(*)>5

#案例2:每个工种有奖金的员工的最高工资>12000的工种编号和最高工资

SELECT job_id,MAX(salary) 最高工资
FROM employees
WHERE commission_pct IS NOT NULL
GROUP BY job_id
HAVING MAX(salary)>12000

#案例3:领导编号>102的每个领导手下的最低工资大于5000的领导编号和最低工资

SELECT manager_id,MIN(salary) 最低工资
FROM employees
WHERE manager_id>102
GROUP BY manager_id
HAVING MIN(salary)>5000


#4.可以实现排序
#案例1,查询有奖金的员工的最高工资>6000的工种编号和最高工资,按最高工资排序

SELECT job_id , MAX(salary) 最高工资
FROM employees
WHERE commission_pct IS NOT NULL
GROUP BY job_id
HAVING MAX(salary)>6000
ORDER BY 最高工资 DESC

#5.可以按照多个字段分组
#案例 1:查询每个工种每个部门的最低工资,并按最低工资降序
SELECT job_id,department_id,MIN(salary) 最低工资
FROM employees
GROUP BY job_id ,department_id
ORDER BY 最低工资 ASC

连接查询

 

posted @ 2021-04-16 21:08  独眼龙  阅读(115)  评论(0)    收藏  举报