SQL 不及格课程数大于2的学生的平均成绩及其排名

本文介绍了一种使用SQL进行学生成绩统计的方法,通过复杂的联接和子查询,实现了对成绩低于60分且科目数量大于等于2的学生平均成绩的计算,并在此基础上进行了排名。此方法适用于教育数据分析和学生表现评估。

数据

create table scores
(
  sid int,
  score int,
  cid int
);

insert into scores values
(1, 90, 1),
(1, 59, 2),
(1, 67, 3),
(2, 20, 1),
(2, 30, 2),
(2, 40, 3),
(3, 14, 1),
(3, 13, 2),
(3, 15, 3),
(4, 90, 1),
(4, 90, 2),
(4, 87, 3)
;

sql

select t1.sid, t1.average_score, count(distinct t2.sid) as rank_n
from 
(
  select sid, avg(score) as average_score
  from scores
  where sid in
  (
    select sid from scores
    where score <= 60
    group by sid
    having count(cid) >=2
  )
  group by sid
) t1
left join
(
  select sid, avg(score) as average_score
  from scores
  group by sid
) t2
on t1.average_score <= t2.average_score
group by t1.sid
order by t1.average_score desc
;

or 先排名再筛选

select t1.sid, t1.average_score, count(distinct t2.sid) as rank_n
from 
(
  select sid, avg(score) as average_score
  from scores
  group by sid
) t1
left join
(
  select sid, avg(score) as average_score
  from scores
  group by sid
) t2
on t1.average_score <= t2.average_score
where t1.sid in
(
  select sid from scores
  where score <= 60
  group by sid
  having count(cid) >=2
)
group by t1.sid
order by t1.average_score desc
;
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

颹蕭蕭

白嫖?

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

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

打赏作者

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

抵扣说明:

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

余额充值