大数据SQL经典面试题系列(5) - 如何找出最小的N个数

表结构:

表名:Student
name	-- 姓名
stunum	-- 学号
class	-- 班级
adtime	-- 入学时间
age		-- 年龄
major	-- 专业
namestunumclassadtimeagemajor
小赵00011班2016-09-0119计算机
小钱00021班2017-09-0121计算机
小孙00032班2017-09-0119金融
小李00043班2017-09-0117计算机
小周00053班2017-09-0120计算机
小吴00063班2017-09-0118计算机
表名:Success
stunum	-- 学号
counum	-- 课程号
success	-- 成绩
stunumcounumsuccess
00010190
00020170
00020284
00030190
00030380
00040190
00040260
00050185
00060270

筛选出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
;
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

寒 暄

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值