统计 聚合函数进行统计
count
sum
avg
max
min
-- 员工表
CREATE TABLE t_employee(
id INT PRIMARY KEY AUTO_INCREMENT,
employeeName VARCHAR(20),
birthday DATE ,
money INT,
daprName VARCHAR(20)
);
INSERT INTO t_employee(employeeName,birthday,money,daprName)
VALUES('张三','1991-02-04',2500,'销售部'),
('李四','1992-03-04',3500,'行政部'),
('王五','1993-04-04',4500,'市场部'),
('张四','1994-05-04',5000,'行政部'),
('赵六','1995-02-08',3450,'市场部'),
('田七','1996-03-04',5700,'行政部'),
('田柳','1997-09-04',4500,'销售部'),
('萧十','1998-02-24',1400,'行政部'),
('和九','1999-04-06',2500,'销售部'),
('张飞','1991-11-04',8000,'市场部'),
('菲菲','1992-02-05',7000,'财务部');
INSERT INTO t_employee(employeeName,birthday,daprName)VALUES('刘十二','1996-05-05','市场部');
-- 聚合函数得到员工最高工资
SELECT MAX(money) FROM t_employee;
-- 得到工资最高的那个人,既使用降序排序,然后获得第一个人
SELECT * FROM t_employee
ORDER BY money DESC LIMIT 1;
-- 得到员工的最低工资 min
SELECT MIN(money) FROM t_employee;
-- 得到员工的工资综合 sum
SELECT SUM(money) FROM t_employee;
-- 得到公司的平均工资 avg ruguo
SELECT AVG(money) FROM t_employee;
-- 得到所有人的平均工资,包括实习。
SELECT SUM(money)/COUNT(*) FROM t_employee;
-- 得到公里员工人数;count(*)统计所有列,不管null 和count(money),count(非空字段),就不会计算null
SELECT COUNT(*) FROM t_employee;
SELECT COUNT(money) FROM t_employee;
-- 统计公司里面多少个部门 distinct 取出重复项
SELECT DISTINCT daprName FROM t_employee;
-- 分组 group by
SELECT FROM t_employee GROUP BY daprName;
-- 统计每个部门的总人数,包括实习生。 相同的部门名称为一个组。
-- 分组后查询列中,只能出现分组字段和聚合函数。
SELECT daprName,COUNT(*)num FROM t_employee GROUP BY daprName;
-- 统计部门总人数在三个或以上的部门 where 后面不能直接跟聚合函数
-- 如果想对分组后的结果进行统计,那么应该用having
-- having是对分组结果做数据筛选,所以只能跟聚合函数。
SELECT daprName,COUNT(*) FROM t_employee GROUP BY daprName
HAVING COUNT(*)>3;
执行顺序 加上分组后的sql的执行顺序
- 执行from
- where条件过滤
- group by 分组
- select 执行投影列
- having 条件过滤
- order by 排序
having 和where的区别
二者都是过滤条件,where运行在分组钱,因此不能跟着不能执行任何聚合函数。
having是运行在分组后,只能用于聚合函数的过滤。