MySQL之数据预处理

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 笔记


开发工具:

  • mysql-8.0
  • DataGrip

数据源:chapter6.csv

order_id,date,value,memberid,age,sex,profession
112469,2017/4/5,9.32,90D24,35,男,森林业
112471,2017/4/5,26.396,9548A,16,女,建筑工程业
112471,2017/4/5,26.396,9548A,16,女,建筑工程业
112472,2017/4/6,100.14,4819C,44,女,公共事业
112473,2017/4/6,6.52,6915B,40,男,娱乐业
112473,2017/4/6,6.52,6915B,40,男,娱乐业
112475,2017/4/7,34.965,14EB2,45,男,
112476,2017/4/7,30.785,91DF6,22,男,新闻广告业
112477,2017/4/7,2.62,50C86,16,女,


(1)缺失值处理


我们在数据库中存储的数据一般都会由于各种原因存在缺失值,我们需要对这部分数据进行处理。一般的处理方式有两种:第一种是直接把缺失值过滤掉,第二种是对缺失值进行填充。

对第一种处理方式,在SQL中,我们可以通过where进行过滤,具体实现代码如下:

select * from demo.chapter6 where profession != '';

!=表示不等于,""表示空值,缺失值有空格、null和空值三种表现形式,前两种形式虽然也表示缺失值,但是在对应的单元格内是有值的,而后一种空值是没有值的,表示这个单元格什么都没有。


如果缺失值是用空格表示的,要过滤掉缺失值,where后面就需要改成profession != " ";如果缺失值是用null表示的,要过滤掉缺失值,where后面就需要改成profession is not null。


上面的处理方式把profession列是缺失值的行都过滤掉了,所以这种处理方式会把其他非缺失值的字段过滤掉,而造成数据的浪费。我们可以将profession列中的缺失值填充为其他,而不是直接过滤掉,这就是针对缺失值的第二种处理方式,使用的是coalesce()函数,具体实现代码如下:

select order_id,memberid,coalesce(profession,'其他') from demo.chapter6;


(2)重复值处理


对重复值的处理,我们一般采取的方式是删除重复值,即只保留重复数据中的一项,其他数据则被删除。


在SQL中,我们可以使用distinct对查询出来的全部结果进行删除重复值的操作,需要注意的是,这里不是针对全表进行删除重复值的操作,而是针对查询出来的全部结果,也就是select distinct后面的具体列进行删除重复值的操作。如果是select distinct * ,则就是针对全表进行删除重复值的操作了。

-- 重复值处理
select distinct * from demo.chapter6;
select order_id,memberid from demo.chapter6 group by order_id, memberid;

我们对chapter6表中的order_id列和memberid列进行删除重复值的操作,具体实现代码如下:

select distinct order_id,memberid from demo.chapter6;


对重复值进行处理,我们除了可以使用distinct,还可以使用group by,对想要删除重复值的列进行group by就可以得到删除重复值后的结果,具体实现代码如下:

select order_id,memberid from demo.chapter6 group by order_id, memberid;


(3)数据类型转换


在SQL中,我们想要更改某一列的数据类型,可以使用cast()和convert()函数,具体形式如下:

cast(value as type); 
convert(value, type);

上面两个函数中的type表示某列更改为目标数据后的类型。目标数据类型包括如下表所示的几种。

6.png

我们将chapter6表中的age列从整型分别转化为浮点型(decimal)和字符型(char),具体实现代码如下:

-- 数据类型转换:age列从整型分别转化为浮点型(decimal)和字符型(char)
select age,cast(age as decimal ) decimal_age , convert(age,char) char_age from demo.chapter6;

(4)重命名


我们将chapter6表中的所有英文字段名全部重命名为中文字段名,具体实现代码如下:

-- 重命名
select order_id as "订单ID" ,
       date as "下单日期" ,
       value as "订单金额(元)" ,
       memberid as "会员ID" ,
       age as "年龄" ,
       sex as "性别" ,
       profession as "行业" from demo.chapter6;


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
7月前
|
存储 关系型数据库 MySQL
mysql数据基础(1)
mysql数据基础(1)
26 1
|
SQL 关系型数据库 MySQL
Mysql 生成100w条测试数据
https://nsimple.top/archives/mysql-create-million-data.html 有时候我们需要对大数据进行测试,本地一般没有那么多数据,就需要我们自己生成一些。
2709 0
|
9月前
|
SQL 索引
MySQL-优化分析
MySQL-优化分析
42 0
|
11月前
|
SQL Oracle 关系型数据库
Mysql- 基础学习
Mysql- 基础学习
108 0
|
SQL 关系型数据库 MySQL
【MySQL】表的数据处理
【MySQL】表的数据处理
119 0
|
SQL 关系型数据库 MySQL
MySql数据导入
在命令行下登陆mysql。 输入source sql文件全命令即可导入
79 0
MySql数据导入
|
SQL 存储 安全
MySQL分析
设计数据库的结构、表达式,条件语句与运算,根据=号来返回值true或false,允许创建⼀个虚拟列或对已有的列进⾏组合或修改后产⽣的派⽣列,别名,减号的作⽤,可以取负,也可以减去,空值与空⽩值区分,结果,不等于 等等。
|
数据采集 SQL 关系型数据库
使用Mysql工具进行数据清洗
使用Mysql工具进行数据清洗
484 0
使用Mysql工具进行数据清洗
|
关系型数据库 MySQL Python
快速为MySQL创建大量测试数据
1. 引言 在PostgreSQL中可以用generate_series()函数来快速生成大量测试数据,在MySQL中没有提供类似的东西。那么在做测试的时候,要往表中插入大量数据库该怎么办?可以写一个循环执行INSERT语句的存储过程,但这种方式还是太慢,我试了下,1秒钟居然只能插500条记录。
1437 0
|
存储 缓存 编解码
如何更规范化使用 MySQL(上)
一个平台或系统随着时间的推移和用户量的增多,数据库操作往往会变慢;而在Java应用开发中数据库更是尤为重要,绝大多数情况下数据库的性能决定了程序的性能,如若前期埋下的坑越多到后期数据库就会成为整个系统的瓶颈;因此,更规范化的使用MySQL在开发中是不可或缺的。
如何更规范化使用 MySQL(上)