微信怎么做自己的网站,发布出租信息免费的网站,建设银行网站用户名,网站建设小江网页设计目录 问题#xff1a;SQL解答#xff1a; 问题#xff1a;
year表示学生入学年度#xff0c;num表示对应年度录取学生人数#xff0c;stu_len表示录取学生的学制#xff1b;说明#xff1a;例如录取年度2018学制是3年#xff0c;表示该批学生在校年份为20182019、2019… 目录 问题SQL解答 问题
year表示学生入学年度num表示对应年度录取学生人数stu_len表示录取学生的学制说明例如录取年度2018学制是3年表示该批学生在校年份为20182019、20192020、2020-2021在算每年的在校人数时2018/2019/2020/2021年份都需要算上。 以下是示例数据
id year num stu_len
1 2018 2000 3
2 2019 2000 3
3 2020 1000 4
3 2020 2000 3根据以上示例计算出每年的在校人数
SQL解答
由于需要计算每年的在校人数所以先要造出连续的年份。然后与源表进行关联关联条件保证年份在入学年份和结束年份之间即可。
with temp as
(select 2018 as year,3 as stu_len,2000 as numunion allselect 2019 as year,3 as stu_len,2000 as numunion allselect 2020 as year,4 as stu_len,1000 as numunion allselect 2020 as year,3 as stu_len,2000 as num
)select
t1.year
,sum(t2.num) as stu_num
from
(
selectt1.min_yeartab.pos as yearfrom(selectmin(year) as min_year,max(yearstu_len) as max_yearfrom temp)t1lateral view posexplode(split(repeat(,,max_year-min_year),,)) tab as pos,val
)t1
inner join temp t2
on t1.year between t2.year AND t2.year t2.stu_len
group by t1.year