sql知识——06分组

案例学生成绩表
在这里插入图片描述

聚合函数

聚合函数对一组值执行计算并返回单一的值,常与 SELECT 语句的 GROUP BY 子句一同使用。
聚合函数有什么特点?
1.除了 COUNT 以外,聚合函数忽略空值。
2.所有聚合函数都具有确定性。任何时候用一组给定的输入值调用它们时,都返回相同的值。
在这里插入图片描述

分组数据

group by子句可以进行分组数据,但是有一些重要的规定。
1.gruop by子句可以包含任意数目的列。这使得可以对分组进行嵌套。
2.如果在gruop by子句里嵌套了分组,数据将在最后规定的分组上进行汇总。换言之,建立分组时候,指定的所有列都一起计算(不可以从个别的列取回数据)。
3.子句中列出的每个列都必须是检索列或者有效的表达式,不可以是聚集函数聚成的列
4.如果分组列里具有null,则null将作为一个分组进行返回。如果列里有多行null值,他们将分为一组。
5.group by必须出现在where子句后,order by子句前。
例子:按照课程号进行分组

SELECT * FROM `score(成绩)` GROUP BY cNo;

在这里插入图片描述

group by和 order by的分组排序

group by和 order by经常一起完成相同工作,但是他们之间非常的不同。
order by是排序产生输出,对于任意的列都可以使用。group by是分组行,只可能使用选择列或表达式列,如果有聚集函数出现必须一起搭配使用。
例子 :检索所有学生中平均成绩高于80的学生并按照学号聚合,最后按照grade排序输出

SELECT sNo, AVG(grade) as avggrade
FROM `score(成绩)`
GROUP BY sNo
HAVING AVG(grade)>=70
order BY grade;

在这里插入图片描述

过滤分组——having子句

注意到where过滤指定的是行而不是分组,因此需要having子句进行对分组的过滤,having子句支持所有对where适用的操作符。HAVING语句的存在弥补了WHERE关键字不能与聚合函数联合使用的不足。

语法:
SELECT column1, column2, … column_n, aggregate_function (expression)
FROM tables
WHERE predicates
GROUP BY column1, column2, … column_n
HAVING condition1 … condition_n;
例子:检索所有学生中平均成绩高于80的学生并按照学号聚合

SELECT sNo, AVG(grade) as avggrade
FROM `score(成绩)`
GROUP BY sNo
HAVING AVG(grade)>=80;

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值