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='录取人数';
id year num stu_len
1 2018 2000 3
2 2019 2000 3
3 2020 1000 4
4 2020 2000 3
计算出每年在校人数,写出SQL语句:
mysql,我试试吧
SELECT
t2.year,
sum(case when t2.year>=t.year and t2.year <= (t.year + cast(t.stu_len as UNSIGNED INTEGER)) then t.num ELSE 0 end ) num
FROM
admit t,
(SELECT
year
FROM
admit
GROUP BY
year) t2
GROUP BY
t2.year;
SELECT year, SUM(num) AS enrolled_num
FROM admit
GROUP BY year;
使用leg()函数取前stu_len-1行的数据一起求和。
select year,num+sum(leg(num,stu_len-1,null) over(order by year)) year_num from admit
可以使用 GROUP BY 子句和聚合函数 SUM() 计算出每年的在校人数,SQL语句如下:
SELECT year, SUM(num) AS total_num
FROM admit
GROUP BY year;
该查询语句将 admit 表按照 year 字段进行分组,然后针对每年数据计算总人数,返回一个包含年份和总人数的结果集。
不知道你这个问题是否已经解决, 如果还没有解决的话:答案:
是的,我需要计算每个年份在校人数的总和。
根据您的要求,我会使用以下 SQL 语句来解决这个问题:
SELECT year, SUM(num) AS total_num
FROM tablename
GROUP BY year;
在这条 SQL 语句中,您需要替换 tablename
为您创建的招生人数表的实际表名。
这条语句的实现步骤如下:
SELECT
语句选择您需要输出的列,这里我们选择 year
和 num
(每个年份的招生人数)。SUM()
聚合函数将 num
列的值相加,获取每个年份的在校人数总和。AS
关键字将聚合结果的别名命名为 total_num
,以便更好地阅读查询结果。GROUP BY
语句按照 year
列对结果分组,以获得每个年份的在校人数总和。希望这个解决方案能帮到您。