例如:
统计一个班级共有多少学生?:select count(*) from exam;
统计英语成绩大于90的学生有多少个?:select count(*) from exam where english > 90;
统计总分大于220的人数有多少?:select count(*) from exam where chinese+math+english > 220;
(6)聚集函数-SUM:Sum函数返回满足where条件的列的和(忽略NULL),sum仅对数值起作用,否则会报错。对多列求和时“,”号不能少。
Select sum(列名){,sum(列名)…} from tablename
[WHERE where_definition]
例如:
sum 统计某一列数据的和:select sum(列名) from 表名;
统计一个班级数学总成绩?:select sum(math) from exam;
统计一个班级语文、英语、数学各科的总成绩:select sum(chinese),sum(math),sum(english) from exam;
统计一个班级语文、英语、数学的成绩总和 select sum(chinese+math+english) from exam; 或者:select sum(chinese)+sum(math)+sum(english) from exam;
若有一个同学小明的语文null ,null进行所有运算,结果都是null:
select sum(chinese)+sum(math)+sum(english) from exam; 含有小明英语和数学成绩
select sum(chinese+math+english) from exam; 不含小明英语和数学成绩
使用ifnull函数处理null情况 :ifnull(xxx,0) 如果为null,则值是0
select sum(ifnull(chinese,0)+ifnull(math,0)+ifnull(english,0)) from exam; 含有小明英语和数学成绩
统计一个班级语文成绩平均分:select sum(chinese)/count(*) from exam;
(7)聚集函数-AVG:AVG函数返回满足where条件的一列的平均值
例如:
求一个班级数学平均分:select avg(math) from exam;
求一个班级总分平均分:select avg(ifnull(chinese,0)+ifnull(math,0)+ifnull(english,0)) from exam;
(8)聚集函数-MAX/MIN:Max/min函数返回满足where条件的一列的最大/最小值。
Select max(列名) from tablename
[WHERE where_definition]
例如:
求班级最高分和最低分:select max(chinese+math+english),min(ifnull(chinese,0)+ifnull(math,0)+ifnull(english,0)) from exam;
(9)GROUP BY子句:使用group by 子句对列进行分组
可以将查询结果按属性列或属性列组合在行的方向上进行分组,每组在属性列或属性列组合上具有相同的值,使用having 子句 对分组结果进行过滤(Having和where均可实现过滤,但在having可以使用聚集函数,having通常跟在group by后,它作用于分组
)。
SELECT column1, column2. column3.. FROM table;
group by column having …
举例如下:
create table orders(
id int,
product varchar(20),
price float
);
insert into orders(id,product,price) values(1,’电视’,900);
insert into orders(id,product,price) values(2,’洗衣机’,100);
insert into orders(id,product,price) values(3,’洗衣粉’,90);
insert into orders(id,product,price) values(4,’桔子’,9);
insert into orders(id,product,price) values(5,’洗衣粉’,90);
对订单表中商品归类后,显示每一类商品的总价(需要按照商品名称进行分组):
select product,sum(price) from orders group by product;
查询购买了几类商品,并且每类总价大于100的商品:select product,sum(price) from orders group by product having sum(price) > 100;
注意:where 和 having 条件语句的区别 ?
where 是在分组前进行条件过滤,having 是在分组后进行条件过滤
使用where地方都可以用having替换,但是having可以使用分组函数,而where后不可以用分组函数。
使用GROUP BY 时,SELECT 子句中只能由以下部分组成:
1,汇总函数
2,GROUP BY 中出现的列名
3, 1和2通过函数和表达式的结果