m 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通过函数和表达式的结果
例如:
SELECT A_ID ,COUNT(*) FROM C GROUP BY A_ID; =>合法
SELECT A_DATE,COUNT(*) FROM C GROUP BY A_ID; =>不合法,按A_ID分组后,对于其他各列的查询只能是汇总查询,否则没有意义
小结 select 语句 : S-F-W-G-H-O 组合 select … from … where … group by… having… order by … ; 它们的顺序不能改变