4000
聚合函数
在这里我们创建几张表来 做例子
create table teacher(
id int PRIMARY KEY auto_increment,
name VARCHAR(20) NOT null,
sub VARCHAR(20) not null
);
create table student(
id int PRIMARY KEY auto_increment,
name VARCHAR(20) not null,
gender VARCHAR(10) not null
);
create table tea_stu(
id int PRIMARY key auto_increment,
t_id int,
s_id int,
score int,
CONSTRAINT fk_tea FOREIGN KEY (t_id) REFERENCES teacher(id),
CONSTRAINT fk_stu FOREIGN KEY (s_id) REFERENCES student(id)
);
1、count() 计数
SELECT COUNT(id) from student;
统计数学分数大于80 的个数
select count(*) as tatal from score WHERE math>80
统计总分大于150的人的个数
select count(*) as total from score WHERE (math+mysql)>150
count (*)不会忽略null, 其他字段会自动忽略
2、sum()求和
统计一个班mysql的总成绩
SELECT sum(mysql) from score
统计各科的总成绩
SELECT sum(mysql),sum(math),sum(english),sum(ui) from score
统计一个班成绩总和
SELECT sum(mysql+ui+english+math) from score
统计一个班每个人的总成绩
SELECT name ,(mysql+english+math) as total FROM score
统计一班math的成绩平均分
SELECT avg(math) from score
SELECT sum(math)/count(math) from score
3、avg()求平均值
求一个班的平均分
SELECT avg(mysql+mysql+math) from score
4、min() max()最大值和最小值
SELECT MIN(ui),MAX(ui) from score
5、分组 group by 分组
对订单表中的商品归类后 显示每一类商品总价
SELECT t_id,sum(score) from tea_stu GROUP BY t_id
查询商品归类后,商品总价大于2000的商品 HAVING关键字
SELECT t_id,sum(score) from tea_stu GROUP BY t_id HAVING sum(score)>150
注意:
(1)、分组函数的重要规则
如果使用了分组函数,或者使用GROUP BY 的查询:出现在SELECT列表中的字段,要么出现在聚合函数里,要么出现在GROUP BY 子句中。
(上面的product出现在了group by中,price出现在了聚合函数中)
GROUP BY 子句的字段可以不出现在SELECT列表当中。
(2)、having where 的区别
①、where和having都是用来做条件限定的,
②、WHERE是在分组(group by)前进行条件过滤,
③、HAVING子句是在分组(group by)后进行条件过滤,
④、WHERE子句中不能使用聚合函数,HAVING子句可以使用聚合函数。
⑤、HAVING子句用来对分组后的结果再进行条件过滤
having sum(price)>2000 相当于 拿着 列名为sum(price)去查询。