数据库实验3

题目:

1.统计各科的及格率


select cs.CNO as '科目编号',
cs.cn as '科目',
count(1) as '总数', -- count(1) 表示总数
sum(case when s.SCORE>=60 then 1
else 0 end)as '及格数',
(sum(case when s.SCORE>=60 then 1 else 0 end)/count(1))*100 as '及格率'
from course cs
LEFT JOIN score s
on cs.CNO=s.CNO

group by cs.CNO,cs.cn

2. 语文成绩第三名的各科成绩

select c.CN,e.SCORE

from course c,score e

where c.CNO=e.CNO

and e.scode = ( 
select scode from 
course c,score e
 
where
c.CNO=e.CNO
 
and c.CN="语文"
ORDER BY e.SCORE DESC
limit 2,1
) 





3. 找出计算机系有什么科目的成绩有两人以上考到90+

  1. 查询出来所有的90+的人,在进行相关的学科分组,统计人数>2
  2. 这样临时表建立的太多
select * from(

select count(*) as num,t.CN from (
select 
c.CN,e.SCORE FROM
dept d,course c,score e
 
where c.CNO=e.CNO

and  d.CN like "计算机"
)t where 
 t.SCORE>=90

group by t.CN

) t1 
where num>=2






4. 查询学生成绩分最高的人

select *
from score c
where not exists ( select 1 from score c1 where c1.cno = c.cno and c.SCORE < c1.SCORE);

5. 将学生成绩打平展示。显示为学生姓名,语文多少分,数学多多少分,无成绩的也要展现出来

select s.sname,c.CN,e.SCORE
FROM
students s,score e,course c
where e.scode=s.scode
and e.CNO=c.CNO

count(*),count(1),count(列名的区别)

count(1)用1 代表代码行,统计结果不会忽略null的值
count(*) 也是表示所有的行数,不会忽略null的值
 count(列名)统计列名的个数,会忽略null
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有时间指导毕业设计

觉得写的好的话可以给我打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值