聚合函数 分组

-COUNT:统计行数量

–SUM:获取单个列的合计值

–AVG:计算某个列的平均值

–MAX:计算列的最大值

–MIN:计算列的最小值

执行列、行计数(count):

标准格式
SELECT COUNT(<计数规范>) FROM <表名>
其中,计数规范包括:

- * :计数所有选择的行,包括NULL值;

- ALL 列名:计数指定列的所有非空值行,如果不写,默认为ALL;

- DISTINCT 列名:计数指定列的唯一非空值行。

例,计算班里共有多少学生:

SELECT COUNT(*) FROM t_student;

也可加入筛选条件,如求女学生数目:

SELECT COUNT(*) FROM t_student WHERE student_sex='女';


如果要计算班级数目,就需要用到DISTINCT:

SELECT COUNT(DISTINCT student_class) FROM t_student;

DISTINCT即去重,如果不加DISTINCT则结果为表行数——5。

返回列合计值(SUM):

注:sum只要ALL与DISTINCT两种计数规范,无*。

计算学生年龄之和:

SELECT SUM(student_age) FROM t_student;

返回列平均值(AVG):

计算学生平均年龄:

SELECT AVG(student_age)FROM t_student;

返回最大值/最小值(MAX/MIN):

求年龄最大的学生信息(最小值同理):

SELECT MAX(student_age) FROM t_student;

注:这里只能求出最大年龄,要想显示年龄最大的学生全部信息,需要用到之后的子查询。

数据分组(GROUP BY):

SQL中数据可以按列名分组,搭配聚合函数十分实用。

例,统计每个班的人数:

SELECT student_class,COUNT(ALL student_name) AS 总人数 FROM t_student GROUP BY (student_class);
AS为定义别名,别名的使用在组合及联接查询时会有很好的效果
 

分组中也可以加入筛选条件WHERE,执行顺序为:WHERE过滤→分组→聚合函数。

统计每个班上20岁以上的学生人数:

SELECT student_class,COUNT(student_name) AS 总人数 FROM t_student WHERE student_age >20 GROUP BY (student_class);

HAVING过滤条件:

例,我们想查询平均年龄在20岁以上的班级

SELECT student_class,AVG(student_age) AS 平均年龄 FROM t_student GROUP BY (student_class) HAVING AVG(student_age)>20;

SQL的执行顺序:

–第一步:执行FROM

–第二步:WHERE条件过滤

–第三步:GROUP BY分组

–第四步:执行SELECT投影列

–第五步:HAVING条件过滤

–第六步:执行ORDER BY 排序

猜你喜欢

转载自sunshinesix.iteye.com/blog/2255413