1.分割长字符串为多个字段
处理数据时遇到的一个问题,本来表中的字段应该分开的,但是由于数据原因,导致所有字段混合到一个字段中,此时我们需要将长字符串切分成原本的不同字段才能进一步处理。
BookRatings.png
CREATE TABLE BookRating1 AS
SELECT
SUBSTR(bookrating ,1 ,LOCATE('";"',bookrating)-1) AS 'userID',
SUBSTR(bookrating ,LOCATE('";"',bookrating)+ 3 ,LOCATE('";"',bookrating,LOCATE('";"',bookrating)+1) - LOCATE('";"',bookrating) -3) AS 'bookID',
SUBSTRING(bookrating ,LOCATE('";"',bookrating,LOCATE('";"',bookrating)+1)+3) AS 'rating'
FROM BookRatings
以上主要用到字符串处理函数 SUBSTR(),SUBSTRING(),LOCATE() 三个函数,用法可以自行搜索。
BookRating1.png
2.添加一列自动编号以及字段替换
从 bookID 这个字段看出其数字混杂着字母,所以打算将字符串按照行号重新设置 bookID为数值型以简化操作。
先用 DISTINCT 方式取出所有的 bookID 建一个表名为 BOOKID的新表,
CREATE TABLE BOOKID AS
SELECT DISTINCT bookID
FROM BookRating1
然后按以下方式重新设置 bookID(即以行号作为书籍编号):
SET @x = 0;
CREATE TABLE BookIDNew AS
SELECT @x := IFNULL(@x,0)+1 AS bookID , bookID AS book
FROM BOOKID
添加自动编号后的表BookIDNew为:BookIDNew.png
最后用BookIDNew(原始BookRating1表中的书籍编号bookID在此表中的字段名变为book)新表中的 bookID 来替换原始表BookRating1中的 bookID 即可。
CREATE TABLE BookRatingFinal AS
SELECT A.useID AS userID, B.bookID , A.rating
FROM BookRating1 A, BookIDNew B
WHERE A.bookID = B.book
替换bookID后的新表BookRatingFinal如下所示:BookRatingFinal.png
至此,所有预处理已经完成了,可以愉快地进行数据分析啦~