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
以下是示例数据:
id | year | num | stu_len |
---|---|---|---|
1 | 2018 | 2000 | 3 |
2 | 2019 | 2000 | 3 |
3 | 2020 | 1000 | 4 |
4 | 2020 | 2000 | 3 |
根据以上示例计算出每年在校人数,写出SQL语句
生成一个0~最大学制的序号表,与学生人数表关联,条件是序号<学制,计算新的年份year+序号,然后对新的年份汇总求和:
with seq as (
select 0 no
union all select 1
union all select 2
union all select 3
union all select 4
union all select 5
), t as (
select num ,year + no year1
from admin, seq
where no<stu_len
)
select year1,sum(num) cnt
from t
group by year1
from admin, seq where no<stu_len 的作用是让每条人数数据根据学制变多条。
老弟,我来回答一下,记得给个解决和关注哦哈哈。
要根据学生的学制统计每年的学生人数,可以使用SQL的GROUP BY和SUM函数来实现。具体步骤如下:
使用GROUP BY和YEAR函数,按照年度对录取表进行分组,得到每个年度的记录。
使用SUM函数,对每个年度的录取学生人数进行求和,得到每个年度的总录取人数。
在SELECT语句中添加CASE语句,根据学生的学制将每个年度的录取学生人数进行分类统计。
下面是具体的SQL语句:
SELECT
year,
SUM(num) AS total_num,
SUM(CASE WHEN stu_len = '1' THEN num ELSE 0 END) AS len_1_num,
SUM(CASE WHEN stu_len = '2' THEN num ELSE 0 END) AS len_2_num,
SUM(CASE WHEN stu_len = '3' THEN num ELSE 0 END) AS len_3_num
FROM
admit
GROUP BY
YEAR(year);
解释:
运行以上SQL语句,即可得到每个年度的总录取人数,以及每个学制在每个年度的录取人数。