把自己放在静心的境界里,悦读并记录多彩的自然、高尚的人性、纯洁的心灵、美好的情感,感觉很美好,很幸福,很开心!  

                                                                经典十大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