-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 排序
–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 排序