数据库查询之(Ⅱ)统计、分组(排序)查询

(注释:以下举例的所有操作内容均根据下图)

统计查询:

统计函数:

1:求学号为S1的学生的总分和平均分

Select sum(score) as TotalSc ore,avg(score) as AveScore from sc where sno=s1

2:求选修C1课程的最高分和最低分以及两者的差数

Select max(score) as MaxScore ,min(score) as MinScore,max(score)-min(score) as Diff from sc where cno=c1

3:求学校共有多少个系

Select count(distinct dep) as DeptNum from s

(注释:distinct的作用是消去重复行)

4:统计有成绩学生的人数

Select count(score) from sc

(注释:成绩为0的同学计算在内,没有成绩(即成绩为空)的不计算)

5:利用特殊函数count*)计算计算机系的学生总数

Select count(*) from s where dept=”计算机

(注释:count(*)用来统计元组的个数,不消除重复行,不允许使用distinct关键字(对比例3)

Group By 子句

将查询结果按属性列或属性列组合在行的方向上进行分组,每组在属性列或属性列组合上具有相同值。

例:查询各个教师的教师号及其任课门数。

Select TNo,count(*) as C_Num from TC group by TNo

(注释:group by子句按照TNo的值分组,所有具有相同TNo的元组为一组,对每一组使用函数Count进行计算,统计出各位教师任课的门数)

如要在分组后还要按照一定条件进行筛选,就要使用Having子句

例:查询选修两门以上课程学生的学号和选课门数

Select sno, count(*) as sc_num from sc group by sno having (count(*)>=2)

(注释:group by子句按sno的值分组,所有具有相同sno的元组为一组。对每一组使用函数count*)进行计算,统计出每位学生选课的门数。Having子句去掉不满足count*>=2的组。)(注意:where子句和having子句都是指明查询条件的语句,但两者面向的对象不同,where面向的对象是“表或视图等等”,而having子句面向的是“分组”)

Order By子句

当需要对查询结果排序时,应该使用Order By子句,该语句必须出现在其它子句之后,排序的方式可以为desc(降序)asc(升序)默认为升序

1:查询选修课程号为c1的学生学号和成绩,并按成绩降序排列

Select sno, score from sc where (cno=c1) order by score desc

2:查询选修c2c3c4c5课程的学号、课程号和成绩,查询结果按学号升序排列学号相同再按成绩降序排列。

Select sno,cno,score from sc where (cno in(c2,c3,c4,c5)) order by sno,score desc

3:求选课在3门以上且各门课程均及格的学生的学号及总成绩,结果按总成绩降序排列。

Select sno,sum(score)as TotalScore from sc where (score>=60) group by sno having(count(*)>=3) order by sum(score) desc

(注释:order by sum(score) desc可以换为 order by 2 desc”2”代表查询结果的第二列)

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值