聚合函数
聚合函数在查询时可用于检索数据,以便分析和报表生成,提高工作效率。
常见的聚合函数使用场景
1.确定表中的行数(或者满足某个条件或者包含某个特定值的行数)
2.获取表中行组的和。
3.找出表列的最大值、最小值、平均值。
聚集函数定义:运行在行组上,计算和返回单个值的函数
常用的五个聚集函数
- AVG() ,求某列的平均值
获取多个列的平均值,必须使用多个AVG()函数。该函数忽略值为NULL的行。 - COUNT(),计数
- MAX(),求最大值,忽略列值为NULL的行
- MIN(),求最小值
- SUM(),用来返回指定列值的和
注意:
DISTINCT用于COUNT()函数时,必须指定列名,不能用于COUNT(*) 。
DISTINCT使用在MAX和MIN中没有实际意义。
DISTINCT只能使用列名,而不能使用于计算或者表达式
示例:
查询每门课程的平均分
select sc.c_no, avg(sc.sc_degree) from score sc group by sc.c_no;
image.png
select count(*) as s from score ;
select count (sc_degree) as s from score ;
select Max(sc_degree) as max_degree from score;
select sum(sc_degree) as sum_degree from score where c_no = 1105;
GROUP BY分组
SELECT s_sex,COUNT(s_sex)from student GROUP BY s_sex;
image.png
说明:GROUP BY子句,指示MySQL 按照s_sex排序并分组数据。从输出中可以看出,女生有5人,男生有5人。
GROUP BY子句用于MySQL分组数据,然后对每个组而不是整个结果集进行聚集。
GROUP BY一些重要的规定:
- 可以包含任意数量的列.这使得能对分组进行嵌套,为数据分组提供更细致的控制。
- 如果在GROUP BY子句中嵌套了分组,数据将在最后规定的分组上进行汇总。即在建立分组时,指定的所有列都一起计算(所以不能从个别的列取回数据)。
3.Select中出现的字段可以不是聚集函数和GROUP BY子句中的,默认会返回第一条结果,其他sql不支持。 - 除聚集计算语句外,select语句中的每个列都必须在GROUP BY子句中给出(5.5可以使用不打印的列进行分组)。
- 如果分组具有NULL值,则NULL将作为一个分组返回。如果列中有多个NULL,他们将被分为一组。
- GROUP BY子句必须出现在where子句之后,Order By 子句之前。
Having 过滤分组
Where 与Having的联系:
Having支持所有Where操作符(包括通配符条件和带多个操作符的子句),Where的所有技术都适用于Having,两者语法相同,只是关键字有差别。
Where 与Having的差别:
Where在数据分组前进行过滤,Having在数据分组后进行过滤。Where排除的行不包括在分组中,这可能会改变计算值,从而影响Having子句中基于这些数值过滤掉的分组。所以Where子句优先级高于Having。
Having出现则必定有GROUP BY出现。
查询至少有两名学生选择的课程的平均分 ,且课程是以11开头
select sc.c_no, avg(sc.sc_degree) from score sc group by sc.c_no HAVING count(sc.s_no)>2 and sc.c_no like '11%';
image.png
查询至少有一名学生选择的课程的平均分 ,且课程编号中包含5,并根据课程降序排列
select sc.c_no, avg(sc.sc_degree) from score sc group by sc.c_no HAVING count(sc.s_no)>1 and sc.c_no like '%5%' ORDER BY sc.c_no desc;
image.png
总结:
SELECT 子句顺序
select –>from –>where –>group by –>having –>order by –> limit
image.png
网友评论