2023年亚太杯APMCM数学建模大赛数据分析题MySQL的使用

2023年亚太杯APMCM数学建模大赛

以2022年C题全球变暖数据为例

数据分析:

  以2022年亚太杯数学建模C题为例,首先在navicat建数据库然后右键“表”,单击“导入向导”,选择对应的数据格式及字符集进行数据导入
在这里插入图片描述

  导入之后,我们可以双击刚刚导入的2022_apmcm_c_data表,查看一下数据情况。使用"ctrl"+"q"快捷键来新建SQL查询语言,结构化语言查询页面中会自动生成代码:select * from 2022_apmcm_c_data
在这里插入图片描述
  由于原数据条数太多,因此我们可以使用mysql中的limit函数简单查看表重所有字段的前100条数据情况。代码如下:

SELECT * FROM `2022_apmcm_c_data` limit 100;

  你如果要是计算机专业,不会mysql,那你赶紧找个厂子上班得了;你如果不是计算机专业,没学过mysql我不说什么,不是说轻视,因为这个东西根本不用想,然后还有星号星号博主把mysql说的多么高大上,我今天毫无保留的把mysql这点破玩意都讲给你们。
  mysql也好还是oracle数据库也好,它本身最常用最实用的功能就是提供数据存储增删改查的,你tm有的星号星号博主说mysql是机器学习软件,你把读者都当作星号星号是么?它就是个结构化查询语言,别误导读者行么?对于在自己电脑安装mysql的学生,完全没有必要使用建表语句去建表,为什么呢?因为你在导入表之后,双击打开表之后,在表的右侧就会自动生成建表语句,而且这个表在你导入之后就自动建好了。
在这里插入图片描述

  然后我再多说一嘴,你如果搭建数据库这个环境,完全没有必要在官网下载mysql,因为现在已经有了mysql环境集成程序包,就30MB,无须配置环境而且免费的,你如果安装官网mysql,不仅步骤繁琐,而且占空间太大。我就很好奇这事为啥没一个博主说呢?还是你们不会啊??我带**大学的拿研究生数学建模国奖的时候,你还在那“习莱克特”呢,你还支棱上了,还mysql数学建模,mysql根本做不了数学建模,严格意义上讲是pivot分析。
  猪鼻子插葱都在这装象是吧,好,上菜

  查看某张表的数据结构或所有列和列变量数据类型

DESCRIBE 2022_apmcm_c_data;
desc 2022_apmcm_c_data;

  这两个函数用哪个都行 无所谓的 结果都是一样的

  查看指定字段的表数据

select dt,AverageTemperature,Country from 2022_apmcm_c_data;

  常用聚合计算函数教学

  计算某一列(这里选用的是温度)数值变量之和

select sum(AverageTemperature) from 2022_apmcm_c_data;

  请得出所给表中数据所有城市名称汇总

  distinct用于返回不同的值(即去重功能)。在表中,一列通常包含许多重复值,该函数可以去重,得出去重后的结果。

select distinct City from 2022_apmcm_c_data;

  计算不同国家下的数据条数

  Group by是SQL语句中的一个重要操作,它可以将数据按照指定的列进行分组,并对每个分组进行聚合操作,如求和、计数、平均值等。

select Country,count(1) from 2022_apmcm_c_data group by Country;

  计算不同国家不同时间下的数据条数

select dt,Country,count(1) from 2022_apmcm_c_data group by dt,Country;

  计算不同国家不同时间下的温度之和

select dt,Country,sum(AverageTemperature) from 2022_apmcm_c_data 
group by dt,Country;

  计算不同国家不同时间下的温度之和并按照时间顺序进行排序

  在SQL中,ORDER BY是一种用于对结果集进行排序的子句。它通常紧跟在SELECT语句之后,可以根据一个或多个列对结果集进行排序。ORDER BY子句可以使用升序(默认)或降序来排序数据。

select dt,Country,sum(AverageTemperature) from 2022_apmcm_c_data 
group by dt,Country ORDER BY dt;

  请给出2000年以来不同地区国家的最高气温数据透视表

  where和having都可以实现字段条件的限制

  在SQL语句中,WHERE子句用于筛选出符合特定条件的数据。

  在SQL语句中,HAVING子句通常与GROUP BY子句一起使用来限制对分组后的结果集进行过滤。它和WHERE子句的区别在于:

  1. HAVING子句用于过滤分组后的结果集,而WHERE子句用于过滤原始数据集。

  2. HAVING子句只能在SELECT语句中使用,而WHERE子句可以在SELECT、UPDATE和DELETE语句中使用。

  3. HAVING子句中可以使用聚合函数,而WHERE子句不可以使用聚合函数。

  方法一 使用where和日期转化函数中的截取年功能YEAR函数

select dt,max(AverageTemperature) from 2022_apmcm_c_data 
where YEAR(dt) >=2000 GROUP BY dt ORDER BY dt;

  此方法虽然得到2000年以来不同地区国家的最高气温数据透视表,但是并未按照正确的时间顺序给出结果

  因此我们稍作改动 使用日期转化函数from_unixtime

  由于数据库中dt字段为char类型,因此需转换成日期类型

select dt,max(AverageTemperature) from 2022_apmcm_c_data 
where from_unixtime(dt,'%Y-%m-%d') GROUP BY dt having
 YEAR(dt) >=2000 ORDER BY dt;
select dt,max(AverageTemperature) from 2022_apmcm_c_data 
where from_unixtime(CONVERT(dt,date),'%Y%m%d') GROUP BY 
dt ORDER BY dt;
select dt,max(AverageTemperature) from 2022_apmcm_c_data
 where from_unixtime(cast(dt as date),'%Y%m%d') GROUP BY dt ORDER BY dt;
select dt,max(AverageTemperature) from 2022_apmcm_c_data 
where DATE_FORMAT(CONVERT(dt,date),'%Y%m%d') GROUP BY dt ORDER BY dt;
select dt,max(AverageTemperature) from 2022_apmcm_c_data 
where DATE_FORMAT(STR_TO_DATE(dt,'%Y-%m-%d'),'%Y%m%d') 
GROUP BY dt ORDER BY dt;

  数据格式检验

select DATE_FORMAT(STR_TO_DATE(dt,'%Y-%m-%d'),'%Y%m%d') from 2022_apmcm_c_data  where dt is not null ORDER BY dt;

  我虽然列出了这么多方法 但是结果不正确 为什么?因为导入数据时,数据格式不统一,这就造成了后续数据分析中较大的数据偏差

  进行数据处理之后 我们再次导入数据

  新导入的数据表为2022_apmcm_c_data_copy1

select dt,max(AverageTemperature) from 2022_apmcm_c_data_copy1 
where from_unixtime(CONVERT(dt,date),'%Y%m%d') GROUP BY dt ORDER BY dt;

  查完之后还是不正确,为什么呢?因为你导入数据的类型不对 温度这是数值数据

  我们使用限定条件检查一下

select max(AverageTemperature) from 2022_apmcm_c_data_copy1 
where dt='2013-01-01';

  接着我们修改一下数据类型 因为varchar类型无法进行数值比较

  这里可直接修改表结构或使用sql语言来改变表结构

  注意 不能使用int类型,因为原温度数据带有小数点,应使用double类型

  之后下一节我们会专门讲解alter的用法

ALTER TABLE 2022_apmcm_c_data_copy1 MODIFY AverageTemperature double;

  接着我们再次检查一下

select max(AverageTemperature) from 2022_apmcm_c_data_copy1
 where dt='2013-01-01';

  数据正常之后我们现在再来实现一下2000年以来不同地区国家的最高气温数据透视表功能

  方法一

select dt,max(AverageTemperature) from 2022_apmcm_c_data_copy1 
where from_unixtime(dt,'%Y-%m-%d') GROUP BY dt having YEAR(dt)
 >=2000 ORDER BY dt;

  方法二

select dt,max(AverageTemperature) from 2022_apmcm_c_data_copy1 
where DATE_FORMAT(STR_TO_DATE(dt,'%Y-%m-%d'),'%Y%m%d') >='20000101'
 GROUP BY dt ORDER BY dt;

  这里方法太多了 我上述给出我最常用的两种

  上述我们使用了日期函数,现在我这边教学一下字符串函数和聚合函数的简单综合运用

  请计算2010年以来不同国家的平均地理位置(平均经纬度)

  在mysql中,replace函数与SELECT语句配合使用时,可以用于进行字符串替换操作,同时也支持多个字符串同时被替换,语法为“SELECT REPLACE(数据库表的列名,需要替换的字符串,替换成的字符串)”。

  在MySQL中,AVG函数用于计算某个字段的平均值。平均值是通过将数值求和然后除以总数得到的。

  我们循序渐进的来教学

  这里不使用update的原因就是不要改变原数据,因为改变之后或许还会用到经纬度的字符。

  但是如果你有备份不嫌麻烦可以使用update,但更新有风险,检验需谨慎

  sql嵌套子查询和函数的综合运用

  1.先替换掉字段数据中的N和E字符

select dt as 日期,Country as 国家,replace(Latitude,'N','') as 纬度,
replace(Longitude,'E','') as 经度 from 2022_apmcm_c_data_copy1 where 
from_unixtime(dt,'%Y-%m-%d') GROUP BY dt,Country,Latitude,Longitude 
having YEAR(dt) >=2000 ORDER BY dt;

  2.然后再替换掉数据中的S和W字符

select a.日期,a.国家,replace(a.纬度,'S','') as 纬度,replace(a.经度,'W','') as 经度 
from(
select dt as 日期,Country as 国家,replace(Latitude,'N','') as 纬
度,replace(Longitude,'E','') as 经度 from 2022_apmcm_c_data_copy1 where 
from_unixtime(dt,'%Y-%m-%d') GROUP BY dt,Country,Latitude,Longitude 
having YEAR(dt) >=2000 ORDER BY dt)a;

  3.1使用convert函数类型转化及均值函数计算

  注意 这里转不了double类型 数据类型不懂的 看一下float double 和decimal的区别

  float类型表示单精度浮点数值,double类型表示双精度浮点数值,float和double都是浮点型,而decimal是定点型;

  MySQL 浮点型和定点型可以用类型名称后加(M,D)来表示,M表示该值的总共长度,D表示小数点后面的长度,M和D又称为精度和标度,如float(5,2)的 可显示为999.99,MySQL保存值时会进行四舍五入,如果插入999.009,则结果为999.01。

select b.日期,b.国家,AVG(CONVERT(b.纬度,DECIMAL(10,2))),
AVG(CONVERT(b.经度,DECIMAL(10,2))) from(
select a.日期,a.国家,replace(a.纬度,'S','') as 纬度,
replace(a.经度,'W','') as 经度 from(
select dt as 日期,Country as 国家,replace(Latitude,'N','') 
as 纬度,replace(Longitude,'E','') as 经度 from 2022_apmcm_c_data_copy1
 where from_unixtime(dt,'%Y-%m-%d') GROUP BY 
 dt,Country,Latitude,Longitude having YEAR(dt) >=2000 
 ORDER BY dt)a)b group by b.日期,b.国家;

  3.2也可以使用cast函数类型转化及均值函数计算

  cast功能测试

select CAST(AverageTemperature as decimal(8,2)) from 2022_apmcm_c_data_copy1;
select b.日期,b.国家,AVG(CAST(b.纬度 as decimal(9,2)))
,AVG(CAST(b.经度 as decimal(9,2))) from(
select a.日期,a.国家,replace(a.纬度,'S','') 
as 纬度,replace(a.经度,'W','') as 经度 from(
select dt as 日期,Country as 国家,replace(Latitude,'N','')
 as 纬度,replace(Longitude,'E','') as 经度 from 
 2022_apmcm_c_data_copy1 where from_unixtime(dt,'%Y-%m-%d')
 GROUP BY dt,Country,Latitude,Longitude having YEAR(dt) >=2000 
 ORDER BY dt)a)b group by b.日期,b.国家;

下节课我们详细讲,MySQL中的where用法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/148022.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

外贸客户管理系统是什么?推荐的管理软件?

外贸客户管理系统哪个好用?海洋建站如何选管理系统? 外贸客户管理系统,是一款专为外贸企业设计的客户关系管理系统,旨在帮助外贸企业建立与维护客户关系,提高客户满意度和忠诚度,提升企业业绩。海洋建站将…

005.终端信息、日期、调试

编写命令行shell脚本时,总是免不了处理当前终端的相关信息,比如行数、列数、光标位置、遮盖的密码字段等。tput和stty是两款终端处理工具。 1、获取终端信息 a. tput 命令 获取终端行数 tput cols 获取终端列数 tput lines 打印当前的终端名 tput…

java创造对象

java创造对象主要分为以下几个步骤 获取对应的类,查看是否加载,如果没有加载把类进行加载根据类的信息可以直接获取到实例的大小,分配对应内存调用实例的方法 比如说 class bb implements Serializable {private String bb; }class aa ext…

【C#学习】给FormClosing增加消息响应函数

第一步:增加消息句柄 第二步:编写消息函数 private void Form1_FormClosing(object sender, FormClosingEventArgs e) {//add your code hereserialPort1.Close();}

【23真题】懒得出题!连续两年试卷相同!

连续两年出题一样,老师都懒得出题的院校又被我抓到一所!(上次是天津工业22和21年一模一样),这次沈阳工业的老师多多少少改了几个数,但是也大差不差,考这所院校,猛刷真题,…

亚马逊鲲鹏系统可全自动化批量操作亚马逊买家号

亚马逊鲲鹏系统可以注册买家号、智能养号、自动下单、自动留评、QA等,是一款从注册到下单于一体的软件。 如果想要自动化注册,那么准备好账号所需要的邮箱、ip、手机号之后就可以进行自动注册了,注册时可以自动输入账号密码信息、自动接收验证…

11.3SpringMVC

一.概念 1.SpringMvc: a.构建在Servlet(api)基础上. b.是一个Web框架(HTTP). c.来自于Spring webMVC模块. 2.MVC 二.注册路由的注解 1.RequestMapping("/test") // 路由注册 注意: 这个注解在类和方法上都要使用,代表不同等级的路由. 2.RestController a)R…

ALPC_Natural_Selection

刚刚结束的ICPC2023沈阳是自然选择号的最后一场 XCPC 区域赛,很高兴也很幸运能拿到校排名 rk4,圆了一个这半年才开始做的梦。在这里讲一下这支队伍的故事。 组队、训练 本来和wjy666(aka maple)打完 EC Final 之后是想要退役的&…

“程序员们的奔溃瞬间”——分享你最令你哭笑不得的程序员经历

文章目录 每日一句正能量前言编程趣事后记 每日一句正能量 每件事最后都会是好事。如果不是好事,说明还没到最后。 前言 作为程序员,我们时常会遇到各种奇怪的错误和挑战,有时候我们会崩溃,但更多的时候,我们会从中学…

从0开始学习JavaScript--JavaScript基础

JavaScript作为一门前端编程语言,在现代web开发中扮演着不可替代的角色。它不仅为网页增添了动态和交互性,而且随着Node.js的崛起,也在服务器端开发中占据了重要地位。在本章节中,我们将探讨JavaScript的作用、重要性以及与其他前…

第二证券:大爆发!道指一夜大涨近500点

当地时间11月14日,美股三大股指显着上涨,其间,道指涨1.43%,标普500指数涨1.91%,纳斯达克指数涨2.37%。 标普500指数创4月份以来的最大单日涨幅。美债收益率大跌。美国10月CPI数据进步了美联储结束加息行为的希望&…

Find My平衡车|苹果Find My技术与平衡车结合,智能防丢,全球定位

随着人们环保意识的加强,电动车的数量与日俱增。与此同时,科学家经过潜心的研究,终于开发出新款两轮电动平衡车。两轮电动平衡车是一种新型的交通工具,它与电动自行车和摩托车车轮前后排列方式不同,而是采用两轮并排固…

舞台演出控制软件:QLab Pro

QLab Pro是一款功能强大的现场多媒体控制器软件,专为Mac用户设计。它提供了一个直观简洁的用户界面,使得用户能轻松管理和组织所有的媒体资源。QLab Pro支持导入各种音频和视频文件,并具备强大的音频、视频处理和灯光控制功能,可以…

Umi-OCR :一个完全离线的OCR图片转文字识别软件。

Umi-OCR :一个完全离线的OCR图片转文字识别软件。 开源免费,支持截屏或批量导入图片,并能识别多国语言,合并段落,处理竖排文字。 排除图片中的水印区域,提取干净的文本。 忽略特定区域的文字识别&#x…

什么是Vue.js中的单向数据流(one-way data flow)?为什么它重要?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

colormap与colorbar应用

一,colormap 常见色度枚举值如下 应用如下 img cv2.applyColorMap(img, cv2.COLORMAP_JET) cv2.imshow(img,img) cv2.waitKey(0) cv2.destroyAllWindows() 常用的COLORMAP_JET效果如下,该模式常用于生成热力图 二,colorbar colorbar所有…

洗袜子的洗衣机哪款好?家用小洗衣机推荐

最近这两年在洗衣机中火出圈的内衣洗衣机,它不仅可以清洁我们较难清洗的衣物,自带除菌功能,可以让衣物上的细菌,还能在清洗的过程中呵护我们衣物的面料,虽然说它是内衣洗衣机,它的功能不止可以清洗内衣&…

VS2017新建.hpp文件

目录 1、新建h文件的方法:2、新建对用的cpp文件:3、在main.cpp中调用 1、新建h文件的方法: 2、新建对用的cpp文件: 3、在main.cpp中调用 参见大佬博客

[Linux]tcpdump抓包工具

windows中的抓包工具:wireshark linux中的抓包工具:tcpdump cpdump是Linux系统中自带抓包工具 [rootIKUN ~]# rpm -q tcpdump tcpdump-4.9.0-5.el7.x86_64 [rootIKUN ~]# tcpdump tcp -i ens33 -t -s 0 -c 100 and dst port ! 22 and src net 192.1…

SaleSmartly新增AI意图识别触发器!让客户享受更精准的自动化服务

AI意图识别技术是对话式AI中很重要的组成部分,通俗点来说就是一种可以识别用户在对话中表达的意图的技术。通过对大量数据的分析和学习,AI可以理解用户想要获得的信息,并根据这些信息来采取相应的行动或提供相应的响应。而在对话式AI中&#…