手撕sql面试题:计算出在校人数,字段中含有学生的学制


 


         今天分享一道面试题!如下:

        

  1. 有一个录取学生人数表,记录的是每年录取学生人数和入学学生的学制

以下是表结构:

CREATE TABLE `admit` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `year` int(255) DEFAULT NULL COMMENT '入学年度',
  `num` int(255) DEFAULT NULL COMMENT '录取学生人数',
  `stu_len` varchar(255) DEFAULT NULL COMMENT '学生学制',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COMMENT='录取人数';

year表示学生入学年度

num表示对应年度录取学生人数

stu_len表示录取学生的学制

说明:例如录取年度2018学制3,表示该批学生在校年份为2018~2019、2019~2020、2020~2021

 根据以上示例计算出每年在校人数,写出SQL语句:

        思路:1.先提取一张去重好的年份表,sql: select distinct year from admit

                   2.然后和admit进行关联,关联条件:当前year的值到学年制最后一年的数据
                   3.跟着根据year进行分组求和

 

SELECT year.year, SUM(t_admit.num) AS stu_sum
FROM (
    SELECT DISTINCT year
    FROM admit
) AS year
JOIN admit AS t_admit ON 
year.year BETWEEN t_admit.year AND t_admit.year + t_admit.stu_len - 1
GROUP BY year.year;

 执行结果:


 


感谢各位的观看,创作不易,能不能给哥们来一个点赞呢!!!

好了,今天的分享就这么多了,有什么不清楚或者我写错的地方,请多多指教!

私信,评论我呗!!!!!! 

关注我下一篇不迷路哦!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值