把自己放在静心的境界里,悦读并记录多彩的自然、高尚的人性、纯洁的心灵、美好的情感,感觉很美好,很幸福,很开心!
经典十大SQL习题
1.
//查询每个年级的总学时数,并按照升序排列
看到这题不要慌,认真分析题目所要求的内容,先从科目表中查询年级,要求为总学时数就要用到SUM(课时数)了
升序就要用到order by了.然后代码可想而知就出来了:
select GradeId,SUM(ClassHour) as 总学时数 from Subject group by GradeId order by sum(ClassHour)
2.
//查询每个参加考试的学员平均分
题目要求我们查询每个参加考试的学员的平均分,理所当然就要用到AVG()函数,再往下想就要考虑到从什么表中
查询,也就是从成绩表中在加上学生的编号,代码如下:
select studentNo,AVG(studentresult) as 平均分 from Result group by StudentNo
3.
//查询每门课程的平均分,并按照降序排列
这一题跟2题类似都是求平均分,只不过要求我们是按照降序排列,我们只需要加一个DESC的关键字即可:
select subjectid,AVG(studentresult)as 平均分 from Result group by SubjectId order by 平均分 desc
4.
//查询每个学生参加所有考试的总分,并按照降序排列
题中要求我们查询每个学生考试的总和,并按照降序.那可想而知一定得有SUM()函数与order by(DESC):
select studentno,SUM(studentresult) as 总分 from Result group by StudentNo order by 总分 desc
5.
//多列分组,每个年级 男女生总人数
题中需要我们进行多列分组并求出男女生的总人数,这个时候就不需要SUM()函数了,需要用到COUNT()函数即可:
select gradeid,gender,COUNT(1) from student group by GradeId,Gender order by GradeId,Gender
6.
//每个年级的总人数,满足总人数必须大于等于3
当题中限定一些条件的时候,我们不要去急着下定论,一定要冷静分析需要WHERE子句还是HAVING子句,因为WHERE子句只能对没有分组统计前的数据进行筛选.对分组后的条件筛选必选使用HAVING子句.所以这道题
可想而知必须使用HAVING子句来实现咯~:
select gradeid,COUNT(1) as 总人数 from student group by GradeId having COUNT(1)>=3
7.
//查询每年级学时数超过40的课程数
这道题需要统计每年级学时超过40小时的课程总数,所以要用到COUNT()函数,要求为超过40则我们只需要
加一个where子句即可实现:
select gradeid,COUNT(subjectid) as 课程数 from Subject where ClassHour>40 group by GradeId
8.
//查询参加考试的学生中,平均分及格的学生记录(学号,平均分),按照降序排列
看到这道题目,请仔细观察,不要被其中的字眼所迷惑,题中要求我们查询平均分及格的学生记录,注意是"平均分及格"
先用AVG()函数求出考试学生的平均分,然后在筛选出平均分为60分以上也就是及格的学生,最后加一个DESC来
降序即可:
select studentno,AVG(StudentResult) as 平均分 from Result group by StudentNo having AVG(StudentResult)>=60 order by 平均分 desc
9.
//查询考试时间为2009-09-09课程的及格平均分
这道题只需要限定好时间就可以查出想要的问题了:
select subjectid,AVG(studentresult) as 平均分 from Result where ExamDate>=‘2009-09-09‘ and ExamDate<‘2009-09-10‘ group by SubjectId having AVG(StudentResult)>=60
10.
//--统计至少有一次不及格的学生学号和次数。
分析题目得出查询条件只要限定学生成绩低于60分以下即可:
select studentno,COUNT(1) as 次数
from Result where StudentResult<60 group by StudentNo