数据清洗和汇总

一、字段

​ 字段用于将不同列的内容进行组合,以满足生产的需要。

拼接字段

​ MySQL使用concat()函数拼接字段。

SELECT concat(id,'_',name) FROM customers;
#上面将会把生成id_name列

​ 这样生成的表只适用于控制台查询,无法被客户机使用。建议使用别名创建可用于客户机的表。

二、别名

别名又被称为导出列,常用于生成汇总数据和重命名列。SQL使用AS创建别名:

SELECT id AS customer_id FROM customers;
#创建id列的别名

​ 创建别名后,别名将代替原本的列名。

SELECT concat(id,'_',name) as id_and_name FROM customers;
#为拼接的字段创建别名

三、函数

​ MySQL函数名不区分大小写。

1.去除空格

| 函数 | 用途 | | :—–: | :————–: | | RTrim() | 去除列值右边空格 | | LTrim() | 去除列值左边空格 | | Trim() | 去除列值两侧空格 |

​ 该函数可以用来配合通配符使用,以避免因两侧空格导致的不匹配问题。

SELECT address FROM customers WHERE rtrim(address) LIKE "%B";
#索引以B开头的address,忽略列值右边空格

2.文本处理函数

| 函数 | 用途 | | :——-: | :—————: | | left() | 返回串左边的字符 | | length() | 返回串长度 | | locate() | 查询串的一个字串 | | lower() | 串转换为小写 | | upper() | 串转换为大写 | | soundex() | 返回串的soundex值 |

1.截取串

SELECT left("hello",3);#从左边截取字符串的前三个字符
SELECT left(name,3) FROM customers;#截取name列值的前三个字符

left()同样能够截取数字列

2.字符串查找

​ 除了通配符和正则表达式之外,locate函数也提供了字符串查找的功能。

locate(字串,母串);

locate函数返回第一个出现字串的位置,若没有查询到字串,则返回值为0

SELECT name,locate("z",name) FROM customers;
#查询name列中'z'第一次出现的位置

​ locate()同样能够查询数字。

3.字符串截取

​ substring(string,pos=begin(),pos=end());

4.模糊音查询

​ soundex用于查询读音相近的记录:

SELECT name FROM customer WHERE soundex(name)=soundex("Y Lie");
#查询name中读音和"Y Lie"相近的记录

5.时间函数

| 函数名 | 用途 | | :———–: | :—————————-: | | AddDate() | 增加一个日期(天、周等) | | AddTime() | 增加一个时间(时、分等) | | CurDate() | 返回当前日期 | | CurTime() | 返回当前时间 | | Date() | 返回日期时间的日期部分 | | DateDiff() | 计算两个日期之差 | | Date_Add() | 高度灵活的日期运算函数 | | Date_Format() | 返回一个格式化的日期或时间串 | | Day() | 返回一个日期的天数部分 | | DayOfWeek() | 对于一个日期,返回对应的星期几 | | Hour() | 返回一个时间的小时部分 | | Minute() | 返回一个时间的分钟部分 | | Month() | 返回一个日期的月份部分 | | Now() | 返回当前日期和时间 | | Second() | 返回一个时间的秒部分 | | Time() | 返回一个日期时间的时间部分 | | Year() | 返回一个日期的年份部分 |

6.数学函数

| 函数 | 用途 | | :—-: | :—————-: | | Abs() | 返回一个数的绝对值 | | Cos() | 返回一个角度的余弦 | | Exp() | 返回一个数的指数值 | | Mod() | 返回除操作的余数 | | Pi() | 返回圆周率 | | Rand() | 返回一个随机数 | | Sin() | 返回一个角度的正弦 | | Sqrt() | 返回一个数的平方根 | | Tan() | 返回一个角度的正切 |

7.聚集函数

| 函数 | 用途 | | :—–: | :————–: | | AVG() | 返回某列的平均值 | | COUNT() | 返回某列的行数 | | MAX() | 返回某列的最大值 | | MIN() | 返回某列的最小值 | | SUM() | 返回某列值之和 |

所有聚集函数包含两个参数:第一个参数默认为ALL,可更改为DISTINC,第二个参数为列名。

四、分组

​ 分组主要是为了查询多行的汇总数据。主要依赖于GROUPHAVING语句:

SELECT count(*) AS FROM cutomers GROUP BY id HAVING count(*)>=2;
#按id分组,并显示组行>=2的组

五、数据汇总

​ 使用字段、别名、函数可以方便地建立汇总表:

SELECT AVG(price) AS averagePrice FROM items GROUP BY name;
#按商品名字分组并查询各组price列的平均值