mysql成绩汇总_MySQL的汇总分析
⼀、汇总函数函数含义
count求某列的⾏数
sum对某列数据求和
avg求某列数据的平均值
max求某列数据的最⼤值
min求某列数据的最⼩值
count(列名):求某列的⾏数(除去空值)
count(*):求所有⾏数(包括空值)
count(distinct 列名):对某列去重后求⾏数
例1:查询课程编号为“0002”的总成绩
-
- 查询课程编号为“0002”的总成绩select 课程号,SUM(成绩) as 总成绩
from score
where 课程号='0002';
例2:查询选了课程的学⽣⼈数
-- 查询选了课程的学⽣⼈数select count(distinct 学号) as 学⽣⼈数
from score;
⼆、分组
关键词group by表⽰分组
group by⼀般与汇总函数搭配使⽤,运⾏逻辑如下:
先对group by的字段即性别进⾏分组,然后count(*)函数分别统计各组的⾏数(即⼈数),最后组合各组的结果。
group by的运⾏顺序:在where之后
详细步骤如下:
所以,SQL总体运⾏顺序是(from → where → group by) → select,前⾯三个与书写顺序⼀致,最后才执⾏select。例1:查询各科成绩最⾼和最低的分
-- 查询各科成绩最⾼和最低的分select 课程号,max(成绩) as 最⾼分,min(成绩) as 最低分
from score
group by 课程号;
例2:查询每门课程被选修的学⽣数
replace函数 js-- 查询每门课程被选修的学⽣数select 课程号,count(*) as 学⽣数
from score
group by 课程号;
例3:查询男⽣、⼥⽣⼈数
-- 查询男⽣、⼥⽣⼈数select 性别,count(*) as ⼈数
group by 性别;
三、对分组结果指定条件
关键词having表⽰对分组结果指定条件
having的运⾏顺序:在group by之后
例1:查询平均成绩⼤于60分学⽣的学号和平均成绩
-- 查询平均成绩⼤于60分学⽣的学号和平均成绩select 学号,avg(成绩) as 平均成绩
from score
group by 学号
having avg(成绩)>60;
stacking方法提取地表形变例2:查询⾄少选修两门课程的学⽣学号
-- 查询⾄少选修两门课程的学⽣学号select 学号,count(*) as 课程数
mysql面试题汇总
powerpoint有普通视图from score
group by 学号
having count(*)>=2;
例3:查询同名同姓学⽣名单并统计同名⼈数
-- 查询同名同姓学⽣名单并统计同名⼈数select 姓名,count(*) as ⼈数
from student
group by 姓名
having count(*)>1;
四、⽤SQL解决业务问题第⼀步:翻译成⼤⽩话
第⼆步:写出分析思路
第三步:写出对应的SQL语句
例如:如何计算各科的平均成绩第⼀步:翻译成⼤⽩话第⼆步:写出分析思路第三步:写出对应的SQL语句例如:查询⾄少选修两门课程的学⽣学号
第⼀步翻译⼤⽩话:课程数⼤于等于2的学⽣学号
第⼆步写出分析思路:select:查询结果 - [每个学⽣的学号:分组,课程数:count(课程号)]
from:从那张表查数据 - score表
where:查询条件 - 没有
简笔画边框大全group by:分组 - [每个学⽣:按学号分组]
having:指定条件 - [课程数⼤于等于2:count(课程号)>=2]
第三步写出对应的SQL语句:
select 学号,count(课程号) as 课程数
from score
having count(课程号)>=2;
五、对查询结果排序
关键词order by表⽰对查询结果排序
两种排序⽅式:排序⽅式含义
ASC升序(从⼩到⼤)
DESC降序(从⼤到⼩)
order by的运⾏顺序:在select之后,所以having可以使⽤别名
当order by后接两个列名时,如order by 列1 desc,列2 asc,表⽰先对列1降序排序,再对列2升序排序。创新驱动发展战略促进国民经济
例1:查询不及格的课程并按课程号从⼤到⼩排列
-- 查询不及格的课程并按课程号从⼤到⼩排列select 课程号,成绩
from score
where 成绩<60
order by 课程号 desc;
运⾏顺序:from score → where 成绩<60 → select 课程号,成绩 → order by 课程号 desc
例2:查询每门课程的平均成绩,结果按平均成绩升序排序,平均成绩相同时,按课程号降序排列
/*查询每门课程的平均成绩,结果按平均成绩升序排序,平均成绩相同时,按课程号降序排列*/
select 课程号,avg(成绩) as 平均成绩
from score
group by 课程号
order by 平均成绩 asc,课程号 desc;
运⾏顺序:from score → group by 课程号 → select 课程号,avg(成绩) as 平均成绩 → order by 平均成绩 asc,课程号 desc
六、从查询结果取出指定⾏
关键字limit可以从查询结果中取出指定⾏:
limit也可以取出第⼏⾏到第⼏⾏的数据,例如:limit 2,3,表⽰跳过前2⾏后取3⾏数据,即取第3⾏到第5⾏的数据。
limit的运⾏顺序:在order by之后
七、如何看懂报错信息
根据报错信息到错误的语句,修改错误语句。
上图表⽰SQL语句中的第4⾏有错误,having之后是别名【平均成绩】,根据SQL的运⾏顺序规则,having在select之前,即执⾏having 语句的时候,select还没设置别名【平均成绩】,所以having语句识别不出别名,导致错误。
where不能使⽤聚合函数,having才能使⽤聚合函数。
原因是price列看起来是数字类型,实际上是字符串类型,所以需要改为数字类型。
⼋、sqlzoo练习题
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论