首先建立如上图所示的数据表t_student
SQL中聚合函数的分类
1.COUNT:统计行数量(依上图,通过统计行数可以知道学生的数量)
2.SUM:获得单个列的合计值(如student_age那一列,可用该函数来求学生年龄之和)
3.AVG:计算某个列的平均值
3.MAX:计算某个列的最大值
4.MIN:计算列的最小值
执行列、行计数的标准格式: SELECT COUNT(计数规范) FROM 表名
计数规范包括:
1.* 代表计数所有行包括NULL值
2.ALL+列名 代表计数指定列的所有非NULL行。如果不写默认为ALL
3.DISTINCT+列名 代表计数列的非NULL行,且重复的行算一个(如上去重复之后只有T01、T02、T03,计数结果为3)
例题
计算班级里有多少学生
SELECT COUNT(*) FROM t_student; 结果为5
计算班级里有多少女生
SELECT COUNT(*) FROM t_student WHERE student_age=‘女’; 结果为2
计算班级的数目(因为student_class中有重复的值,因此需要用到DISTINCT)
SELECT COUNT(DISTINCT student_class) FROM t_student; 结果为3,没有DISTINCT的话结果为5
SUM(SUM中只有ALL和DISTINCT两种计数规范,无*)
计算学生年龄之和
SELECT SUM(student_age) FROM t_student; 结果为136
计算学生的平均年龄
SELECT AVG(student_age) FROM t_student; 结果为22.6
计算学生年龄的最大值
SELECT MAX(student_age) FROM t_student; 结果为30
数据分组(GROUP BY)
SQL中的数据可以根据列名分组,结合聚合函数后非常实用。
统计每个班的人数
SELECT student_class, COUNT(ALL student_name) AS 总人数 FROM t_student GROUP BY (student_class);
统计每个班级20岁以上的学生人数(这里一定要注意的是,执行顺序为:WHERE过滤→分组→聚合函数。牢记!)
SELECT student_class,COUNT(ALL student_name) AS 总人数 FROM t_student WHERE student_age>20 GROUP BY (student_class);
SQL的执行顺序:
–第一步:执行FROM
–第二步:WHERE条件过滤
–第三步:GROUP BY分组
–第四步:执行SELECT投影列
–第五步:HAVING条件过滤
–第六步:执行ORDER BY 排序