sql查询成绩最⾼分_SQL汇总分析
本篇⽂章在SQL简单查询的基础上,讨论如何对数据进⾏求和、均值、最⼤值最⼩值等汇总分析的⽅法,同时对查询结果进⾏排序。
⼀、常见汇总函数及含义
汇总分析练习:
1、查询课程编号为‘0002’的总成绩
SELECT sum(成绩) FROM score WHERE 课程号='0002';
2、查询选了课程的学⽣⼈数
SELECT count(DISTINCT 学号) FROM score;
⼆、对查询结果进⾏分组
使⽤Group by⼦句对查询结果进⾏分组,结合汇总函数,可以将查询结果按照类似“性别”,“种类”等进⾏划分。要注意group by后⾯不能使⽤列的别名,要使⽤原名。同时where⼦句中不能使⽤聚合函数。
分组练习:
1、查询各科成绩最⾼和最低分
SELECT 课程号, MAX(成绩)AS 最⾼分 FROM score GROUP BY 课程号;
2、查询每门课程被选修的学⽣数
sql语句查询不包含SELECT 课程号, COUNT(DISTINCT 学号)AS 学⽣数 FROM score GROUP BY 课程号;
3、查询男⽣、⼥⽣⼈数
SELECT 性别, COUNT(DISTINCT 学号)AS 学⽣数 FROM student GROUP BY 性别;
三、为聚合结果指定条件
使⽤count函数对数据表中数据进⾏汇总操作时,采⽤having⼦句⽽不是where⼦句来指定条件。having语句主要作⽤是为聚合结果指定条件。其中,where⼦句是⽤来指定数据⾏的条件,having⼦句指定分组条件。其中聚合函数可以在select⼦句,having⼦句和order by字句中使⽤。
分组结果条件练习
1、查询平均成绩⼤于60分的学⽣的学号和平均成绩。
SELECT 学号,AVG(成绩)as 平均成绩 FROM score GROUP BY 学号 HAVING AVG(成绩)>60;
2、查询⾄少选修两门课程的学⽣学号。
SELECT 学号,COUNT(课程号)AS 课程数量 FROM score GROUP BY 学号 HAVING COUNT(课程号)>1;
3、查询同名同姓学⽣名单并统计同名⼈数。
SELECT 姓名,COUNT(姓名)AS 同名数量 FROM student GROUP BY 姓名 HAVING COUNT(姓名)>1;
练习:每门课程的平均成绩
如何计算每门课程的平均成绩,并且平均成绩⼤于等于80分。
SELECT 课程号,AVG(成绩) FROM score GROUP BY 课程号 HAVING AVG(成绩)>60;
四、理解SQL运⾏顺序,并对结果进⾏排序
使⽤order by⼦句对查询结果进⾏排序,其中desc为按照降序排列,asc为按照升序排列,排序键值包含NULL时,会在开头或者末尾进⾏汇总。
练习:理解SQL的运⾏顺序
查询不及格的课程并按课程号从⼤到⼩排列
SELECT 课程号,成绩 FROM score GROUP BY 课程号 HAVING AVG(成绩)<60 ORDER BY 课程号 DESC;
查询每门课程的平均成绩,结果按平均成绩升序排序,平均成绩相同时,按课程号降序排列
SELECT 课程号,AVG(成绩)AS 平均成绩 FROM score GROUP BY 课程号 ORDER BY 平均成绩 asc,课程号 DESC;
五、看懂报错信息
常见易出错的地⽅包括:
1、group by 中不能使⽤select⾥的别名,因为group by 是先运⾏的
2、在where中不能使⽤聚合函数
3、注意字符串类型的数字,因为数值类型的排序和字符串不⼀样,要数据改为数字类型,再进⾏操作。
总结:本章的重点⾸先是理解SQL运⾏的顺序,SQL语句先运⾏from、where、group by、having等查询条件和分组条件的⼦句,第⼆步运⾏select ⼦句显⽰查询结果,第三步运⾏order by, limit对查询结果进⾏排序或者取出指定的⾏。在理解上述运⾏
顺序的基础上,重点掌握汇总函数,分组语句以及分组条件语句,同时对查询的结果还要学会排序。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论