山东做网站的公司,重庆网站seo建设哪家好,金融系统网站模板,太原网站建设优化1. 什么聚合函数
对一组值进行计算,并返回计算后的值,一般用来统计数据
1.1 SUM
累加所有行的值 SELECT SUM(age) AS 总年龄 FROM studb.student WHERE city上海;//返回结果总年龄701.2 AVG
计算所有行的平均值 SELECT AVG(age) AS 平均年龄 FROM st…
1. 什么聚合函数
对一组值进行计算,并返回计算后的值,一般用来统计数据
1.1 SUM
累加所有行的值
SELECT SUM(age) AS '总年龄' FROM studb.student WHERE city='上海';//返回结果总年龄70
1.2 AVG
计算所有行的平均值
SELECT AVG(age) AS '平均年龄' FROM student WHERE city='上海';//返回结果平均年龄35.0000
1.3 MAX、MIN
计算所有行的最大值、最小值
SELECT MAX(age) AS '最大年龄',MIN(age) AS '最小年龄' FROM student WHERE city='上海';//返回两个表//最大值表最大年龄40//最小值表最小年龄30
1.4 COUNT
计算记录的条数
举例:计算来自上海的人有多少
SELECT COUNT(*) AS '上海人数' FROM student WHERE city='上海';//返回结果为上海人数2
2. 分组
分组查询就是按牟烈的值进行分组,相同的值分成一组,然后可以对此组内进行求平均值、和等计算
2.1 语法
SELECT 列名,查询表达式/聚合表达式
FROM <表名>
WHERE <条件>
GROUP BY <分组字段>
HAVING 分组后的过滤条件
ORDER BY 列名 [ASC,DESC]
LIMIT 偏移量,条数
上面的关键字可以不出现,但是如果出现,顺序是固定的
SELECT列表中只能包含:
被分组的列
为每个分组返回一个值的表达式,如聚合函数
2.2 练习
单列分组
统计每位同学的平均成绩 - 单列分组
SELECT student_id,AVG(grade)FROM scoreGROUP BY student_id
统计每门课程的最高分,并按分数从高到低排列 - 单列分组
SELECT course_id,MAX(grade)FROM scoreGROUP BY course_idORDER BY MAX(grade) DESC//注意排序的时候是根据MAX(grade),而不是根据grade
多列分组
统计各省男女的总人数 - 多列分组
SELECT province,gender,COUNT(*) AS '总人数'FROM studentGROUP BY province,gender
2.3 分组筛选
2.3.1 语法
对分组后的结果进行过滤,就是分组筛选
使用HAVING关键字
2.3.2 练习
举例:统计人数大于1的省份及人数
SELECT province,COUNT(*)FROM studentGROUP BY provinceHAVING COUNT(*) > 1
统计不及格次数大于1的同学
SELECT student_id,COUNT(*) 不及格次数FROM scoreWHERE grade<60GROUP BY student_idHAVING COUNT(*) > 1;
3. 子查询
子查询就是指出现在其他SQL语句中的SELECT语句,必须使用出现在圆括号()中
子查询可以包含多个关键字或条件
子查询的外层查询可以是:SELECT、INSERT、UPDATE、SET等
子查询可以返回常量、一行数据、一列数据或其他字查询
3.1 比较运算符的子查询
= 等于
> 大于
< 小于
>= 大于等于
<= 小于等于
<> 不等于
!= 不等于
<=> 安全不等于
3.2 举例:查询年龄大于平均年龄的学生
SELECT *FROM studentWHERE age > (SELECT AVG(age) FROM student);
3.3 ANY SOME ALL
ANY 任何
SOME 存在
ALL 所有
举例:查询年龄大于陕西省任何一位同学的学生信息
SELECT *FROM studentWHERE age > ANY (SELECT age FROM student WHERE province='陕西省');
举例:查询年龄大于陕西省所有同学的学生信息
SELECT * FROM studentWHERE age > ALL (SELECT age FROM student WHERE province='陕西省');
举例:查询年龄与陕西省里面部分同学一样的学生信息
SELECT *FROM studentWHERE age = SOME (SELECT age FROM student WHERE provice='陕西省');
3.4 IN与NOT IN
IN 在…范围内
NOT IN 不在…范围内
举例:查询一下有考试成绩的学生信息
SELECT *FROM studentWHERE id IN (SELECT student_id FROM score WHERE grade IS NOT NULL);
3.5 EXITS与NOT EXITS 这个性能比 IN与NOT IN 要高
EXITS 存在于
NOT EXITS 不存在于…
举例:查询下有考试成绩的学生信息
SELECT * FROM studentWHERE EXITS (SELECT * FROM score WHERE score.student_id = student.id)