SQL计算出每年在校人数

这篇具有很好参考价值的文章主要介绍了SQL计算出每年在校人数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

以下是一个录取学生人数表的示例,记录了每年录取学生的人数和入学学制。 

id year num stu_len
1 2018 101 3
2 2019 121 4
3 2020 91 2
4 2021 151 3
5 2021 141 2
6 2022 161 3

字段解释:

  • id:记录的唯一标识符
  • year:学生入学年度
  • num:对应年度录取的学生人数
  • stu_len:录取学生的学制

    举例说明:例如,录取年度为2018的学制为3,表示这批学生在校的学习时间为20182019、20192020、2020~2021三个学年。

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

1、数据准备

CREATE TABLE `test01` (
                         `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='录取人数';

INSERT INTO `test01` (`year`, `num`, `stu_len`) VALUES
                                                   (2018, 101, '3'),
                                                   (2019, 121, '4'),
                                                   (2020, 91, '2'),
                                                   (2021, 151, '3'),
                                                   (2021, 141, '2'),
                                                   (2022, 161, '3');

2、sql

思路1(笛卡尔积,性能较差):

select t_year.year,
       -- sum() 就是一个累加的过程(累加器),如果为true就执行sum+num,为false就执行sum+0
       sum(case when t_admit.start<=t_year.year and t_year.year<t_admit.end THEN num else 0 end ) stu_sum
from
    (select distinct year from test01) as t_year,
    (select id, num, year as start, year+stu_len as end from test01) as t_admit
GROUP BY t_year.year;

 思路2:

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

explain查看执行计划:

SQL计算出每年在校人数,mysql,sql,数据库,mysql,hive
 

3、运行效果

SQL计算出每年在校人数,mysql,sql,数据库,mysql,hive文章来源地址https://www.toymoban.com/news/detail-568747.html

到了这里,关于SQL计算出每年在校人数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 主流数据库(SQL Server、Mysql、Oracle)通过sql实现多行数据合为一行

    1、方法一:使用 STUFF 和 FOR XML PATH 进行多行合并成一行 (1)FOR XML PATH用法 FOR XML 是 SQL Server 提供的一种功能,允许您将查询结果转换为 XML 格式。 PATH 模式则是其中一种灵活的方式来构造自定义的XML结构。 1、基本字符串连接 : 当您想从单列中提取所有行的数据并连接成一

    2024年04月10日
    浏览(57)
  • 【MySQL 数据库】7、SQL 优化

    ① 批量插入数据 ② 手动控制事务 ③ 主键顺序插入,性能要高于乱序插入 主键乱序插入 : 8 1 9 21 88 2 4 15 89 5 7 3 主键顺序插入 : 1 2 3 4 5 7 8 9 15 21 88 89 【☆】 】 ① 如果需要一次性插入大批量数据(百万级别),使用 insert 语句插入性能 很低 ② 可使用 MySQL 数据库提供的 loa

    2024年02月08日
    浏览(59)
  • 【MySQL数据库】MySQL 高级SQL 语句一

    ) % :百分号表示零个、一个或多个字符 _ :下划线表示单个字符 ‘A_Z’:所有以 ‘A’ 起头,另一个任何值的字符,且以 ‘Z’ 为结尾的字符串。例如,‘ABZ’ 和 ‘A2Z’ 都符合这一个模式,而 ‘AKKZ’ 并不符合 (因为在 A 和 Z 之间有两个字符,而不是一个字符)。 ‘ABC%’

    2024年02月09日
    浏览(197)
  • MySQL之SQL与数据库简介

    SQL首先是一门高级语言,同其他的C/C++,Java等语言类似,不同的是他是一种结构化查询语言,用户访问和处理数据库的语言,那类似于C语言,SQL也有自己的标准,目前市面上的数据库系统都支持SQL-92标准 SQL这门语言是具有统一性的,但是不同的数据库支持的SQL有略微差别,

    2024年01月23日
    浏览(49)
  • MySQL数据库基础(九):SQL约束

    文章目录 SQL约束 一、主键约束 二、非空约束 三、唯一约束 四、默认值约束 五、外键约束(了解) 六、总结 PRIMARY KEY 约束唯一标识数据库表中的每条记录。 主键必须包含唯一的值。 主键列不能包含 NULL 值。 每个表都应该有一个主键,并且每个表只能有一个主键。 遵循原

    2024年02月19日
    浏览(56)
  • 【数据库】MySQL 高级(进阶) SQL 语句

    location表格创建 store_info表格创建 显示表格中一个或数个字段的所有数据记录 不显示重复的数据记录 按照条件进行查询 在已知的字段数据取值范围内取值 另外还有not in命令,用法一致,表示显示不在指定范围内的字段的值。 在两个字段数据值之间取值,包含两边字段的数据

    2024年02月09日
    浏览(132)
  • 大数据之指标计算(6) -- 编写Hive SQL代码,根据dwd层dwd.fact_environment_data表,统计检测设备的每月平均湿度与厂内检测结果做对比存入Mysql数据库中

      本题来源于全国职业技能大赛之大数据技术赛项工业数据处理赛题 - 离线数据处理 - 指标计算 注:由于个人设备问题,代码执行结果以及最后数据显示结果将不会给出。   提示:以下是本篇文章正文内容,下面案例可供参考(使用Scala语言编写)   涉及组件:Hive 涉及知

    2024年02月08日
    浏览(56)
  • MySQL数据库基础(五):SQL语言讲解

    文章目录 SQL语言讲解 一、SQL概述 二、SQL语句分类 1、DDL 2、DML 3、DQL 4、DCL 三、SQL基本语法 1、SQL语句可以单行或多行书写,以分号结尾 2、可使用空格和缩进来增强语句的可读性 3、MySQL数据库的SQL语句不区分大小写,建议使用大写  4、可以使用单行与多行注释 四、总

    2024年02月19日
    浏览(54)
  • 【MySQL】数据库SQL语句之DML

    目录 前言: 一.DML添加数据 1.1给指定字段添加数据 1.2给全部字段添加数据 1.3批量添加数据 二.DML修改数据 三.DML删除数据 四.结尾   时隔一周,啊苏今天来更新啦,简单说说这周在做些什么吧,上课、看书、放松等,哈哈哈,所以博客就这样被搁了。   今天感觉不错,给大

    2024年02月08日
    浏览(62)
  • 【MySQL】——关系数据库标准语言SQL(大纲)

    🎃个人专栏: 🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客 🐳Java基础:Java基础_IT闫的博客-CSDN博客 🐋c语言:c语言_IT闫的博客-CSDN博客 🐟MySQL:数据结构_IT闫的博客-CSDN博客 🐠数据结构:​​​​​​数据结构_IT闫的博客-CSDN博客 💎C++:C++_IT闫的博客-CSDN博

    2024年01月20日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包