表结构:
表名:Student
name -- 姓名
stunum -- 学号
class -- 班级
adtime -- 入学时间
age -- 年龄
major -- 专业
name | stunum | class | adtime | age | major |
---|---|---|---|---|---|
小赵 | 0001 | 1班 | 2016-09-01 | 19 | 计算机 |
小钱 | 0002 | 1班 | 2017-09-01 | 21 | 计算机 |
小孙 | 0003 | 2班 | 2017-09-01 | 19 | 金融 |
小李 | 0004 | 3班 | 2017-09-01 | 17 | 计算机 |
小周 | 0005 | 3班 | 2017-09-01 | 20 | 计算机 |
小吴 | 0006 | 3班 | 2017-09-01 | 18 | 计算机 |
表名:Success
stunum -- 学号
counum -- 课程号
success -- 成绩
stunum | counum | success |
---|---|---|
0001 | 01 | 90 |
0002 | 01 | 70 |
0002 | 02 | 84 |
0003 | 01 | 90 |
0003 | 03 | 80 |
0004 | 01 | 90 |
0004 | 02 | 60 |
0005 | 01 | 85 |
0006 | 02 | 70 |
筛选出2017年入学的“计算机”专业年龄最小的3位同学名单(姓名、年龄)
这道题,有可能考的是limit吧。
select
name,
age
from
student
where
major='计算机' and year(adtime)=2017
order by
age
limit 3
;
统计每个班同学各科成绩平均分大于80分的人数和人数占比
select
a.class,
sum(case when b.avg_suc>80 then 1 else 0 end) as num,
sum(case when b.avg_suc>80 then 1 else 0 end)/count(a.stunum) as pro
from
student a
left join(
select
stunum,
avg(success) as avg_suc
from
success
group by
stunum
) b
on
a.stunum=b.stunum
group by
class
;