十分钟搞懂SQL数据分析
下面的框架图展示了本文的行文顺序,第(一)部分介绍SQL
本文重点在于快速让读者对“SQL数据分析”有全面认识。其次,详解SQL部分关键词或函数,并用实操后的结果向大家展示SQL数据分析。 下面的框架图展示了本文的行文顺序,第(一)部分介绍SQL基本概念,第(二)到(十二)部分,讲解SQL关键词和业务场景。文章末尾处展现了完整的“SQL数据分析”框架图。 (一)基本介绍 1.1 SQL是啥? 一门查询数据库的编程语言。 1.2 SQL能操作谁? SQL可操作关系型数据库,但不能操作非关系型数据库。关系型数据库可简单理解为由行和列组成的二维表。关系型数据库分为开源和收费两类,开源的数据库系统有MySQL、PostgreSQL, 收费有Oracle、SQL Server, DB2。以上系统尽管有不同的SQL语法,但大同小异,学会一种即可,本文选用MySQL。 1.3 SQL语句 通过SQL语句,可在数据库中查到想要的数据。SQL语句由三部分组成,关键字、表名、列名。 (二) SELECT语句 2.1 “*”号代表所有列 “*”号能选出表中所有的列。例如代码:SELECT * FROM Table, 此代码会选出Table表中所有的列。 2.2 DISTINCT 去重 DISTINCT关键词,能对表中一列或多列信息进行去重。以下图为例,DISTINCT 关键字对列名“product_type”去重,列中两个“办公”会变成去重后的一个“办公”,“服装”和“厨房”也有同样去重效果 。 2.3 ORDER BY 排序 ORDER BY 的作用是排序,可对一列或多列排序。下图展示了对两列同时进行排序的例子。 2.3.1 两列排序 代码:“ORDER BY department,salary”,作用是先对department的各个部门排序,其次,基于已排序部门的基础上再对salary进行排序(默认升序)。首先,对部门finance ,marketing,technology按照26个英文字母的升序进行排序,部门依次被排为finance第一,marketing第二,technology第三。其次,当同一部门出现多个员工时,再按照salary大小进行升序排序, 比如,部门的Joe、Sam、Jason被分别排为第一,第二,第三。详情见下图。 2.3.2 业务场景 高铁买票时,会用到价格排序,出发时间、耗时长短;淘宝血拼时,会用到价格排序;大众点评找美食时,会用到距离优先、好评优先等。顾客在使用这些功能时,后台数据库用到的就是简单但强大的“ORDER BY”语句。 2.4LIMIT 限制行数 LIMIT关键词可限制查询行数。LIMIT用法有二。用法一,返回表的前X行;用法二,返回表的特定行。 2.4.1 返回前X行 举例, LIMIT 5, 返回表的前5行。 2.4.2 返回特定行 举例, LIMIT 5,10, 从第6行开始,返回10行。 2.5 语句执行顺序 数据库执行SQL代码的顺序不是按照抒写的顺序来执行,而是按照特点关键字的顺序来执行,执行顺序为:FROM->WHERE->GROUP BY ->HAVING ->SELECT ->ORDER (三) 过滤数据 3.1 WHERE 过滤 3.1.1 大于小于 WHERE语句能选出特定范围的数据,分为三类:①大于,②小于,③大于且小于。以字段“price”为例对此三类进行解释。WHERE price > 1000 能选出价格大于1000的数据;WHERE price < 200 能选出价格小于200的数据;WHERE 700 < price< 1000 能选出价格大于700且小于1000的数据。实操效果见下图。 3.1.2 等于 WHERE语句能选出等于特定数值或文字的数据,比如,WHERE price = 388, 可选出价格为388的数据;再比如,WHERE hotel =‘希尔顿’能选出酒店为“希尔顿”的数据。见下图。 3.1.3 业务场景 京东、淘宝、天猫、携程的官网和APP,均提供“价格区间”和“品牌筛选”的功能,背后的代码就是WHERE语句。 3.2 BETWEEN过滤 WHERE BETWEEN也能筛出特定区间的数值,例如, WHERE price BETWEEN700 AND 1000, 能筛出价格从700到1000的数据, 功能类似于“WHERE 大于且小于”。 3.3 IN 或 NOT IN过滤 WHERE IN 也可筛选数据,例如字段“capital_flows”(资金流向的意思)的数值可以是各个行业,WHERE IN 语句能把“capital_flows”的行业限定在‘房地产’和‘证券’行业,代码见下图。 业务场景:近些年“房地产”和“证券”成为银保监会重点关注的行业,在银保监会大量的EAST报送数据中(EAST系统可简单理解为检查各家银行数据的系统),如何迅速找到资金流到“房地产”和“证券”的数据呢?当属WHERE IN 语句。 3.4 NULL 过滤 WHERE IS NULL 语句能从数据中快速筛选出数据为空值的记录,代码和实操效果见下图。 业务场景:银保监会要求各家银行提供的EAST报送数据不能为空值。例如,客户的“社会信用代码”,“贷款流向行业”不能为空。WHERE IS NULL语句能快速找出数据为空值的记录。 3.4 通配符过滤 通配符(“%”或“_”) 能搭配数据中的任何字符, 达到筛选数据的效果。 3.4.1 %百分号 %百分号 代表0到多个任意字符。举例,代码LIKE “天安门%” 会找到只有“天安门”这三个字和“天安门”后面有其他文字的数据,详情见3.4.2图。 3.4.2 _下划线 _下划线 能代表1个任意字符。LIKE '天安门_' 会找到“天安门”后面有一个文字的数据,比如“天安门东”。详情见下图。 3.5 正则表达式 正则表达式是由各种符号组成的搜索模式,相比“通配符”正则表达式更加精确。下列符号能组成各种正则表达式,但种类繁多且抽象,大家感受一下即可。 3.6 多条件过滤 WHERE语句中,AND和OR能把两个或多个条件结合起来。AND: 如果第一个条件和第二个条件都成立,则显示一条记录;OR如果第一个条件和第二个条件只要有一个成立,则显示一条记录。 (四)处理字段 4.1 拼接字段 CONCAT()函数能把多个字段拼接起来,例如下图,concat()函数能把company和country两个字段拼接在一起,具体代码见文章末尾处的框架图。 4.2 计算字段 字段之间可做加减乘除运算,例如下图展示了,price字段 与 quantity字段相乘得出新的字段,计算结果如下图。 (五)处理数据 处理数据分为三类:处理文本,处理时间,处理数值。对应的三类函数分别为“文本处理函数”,“时间处理函数“,“数值处理函数”。 5.1 文本处理函数 以下是对各个文本处理函数的总结,第一列和第四列是分别是函数名称和相应的解释;第二列和第三列分别是例子和返回的结果。 5.2 时间处理函数 下图是对时间处理函数的总结和解释。 5.3 数值处理函数 下图是对数值处理函数的总结和说明。 (六)聚合函数 常用的聚合函数有以下五种,详情见下图。“计数函数”, 例如COUNT(price),对price列的行数进行计数。“平均值函数”,例如AVG(price),对price列求平均值。“求和函数”,例如SUM(price),对price列中所有值进行求和。“最大值函数”,例如MAX(price),找出price列中的最大值。“最小值函数”,例如MIN(price),找出price列中的最小值。 (七)分组数据 GROUP BY关键词可对数据进行分组,HAVING可对分组后的数据进行过滤。举例,GROUP BY将列"bedrooms”中数量为2、3、4的数据各分为一组;HAVING 又能把数量大于2的分组后数据筛选出来。若觉得抽象,请参考下图。 (八)CASE WHEN 搜索 CASE WHEN搜索语句是一种条件表达式,可实现对定量数据的定性描述。举例,可将两个卧室描述为“小”,三个卧室描述为“适中”,四个卧室描述为“大”, 请参考下图。 (九)窗口函数 窗口函数可分为“聚合函数的窗口函数”和“专用窗口函数”。基本语法: OVER ( [PARTITION BY ]ORDER BY ) 9.1 聚合函数的窗口函数 实操效果和关键词详见下图。 9.2 专用窗口函数 RANK()函数会出现相同排序,和“跳序”DENSE_RANK()函数,会出现相同排序,但无“跳序”ROW_NUMBER()函数,不存在重复的排序。 (十)子查询 子查询是嵌套在主查询中的查询,可以简单理解为在SELECT语句中又嵌套一个SELECT语句。理论上,子查询可嵌套在各个位置,但在实际工作中,主要嵌套在SELECT、WHERE、HAVING等关键词后面。 (十一)多表连接 一张表往往难以查询到需要的所有字段,多表连接可以同时查询多个表的字段,把不同表中的字段进行横向拼接,以满足在多表中各个字段的查询。多表连接主要分为内连接、左连接、右连接、全连接、交叉连接。以左连接为例,Product表为左表,连接Price表mssql 按关键字排序,关联字段为product_id。返回结果:保留左表product表的所有数据,并保留Price表中product_id 为1和3的数据,详情见下图。 (十二)组合查询 组合查询可实现多个SELECT语句的同时查询,并将查询结果作为单个结果集返回。关键词“UNION”可对结果集进行去重,“UNION ALL”不能对结果集进行去重。 (十三)结束语及完整框架图 本文已对“SQL数据分析”进行梳理,并对某些关键词和语句进行了详解。笔者梳理出“SQL数据分析”的完整框架图送给大家,希望对你们有帮助。 团队介绍:我们是毕马威旗下的专业数据挖掘团队,微信公众号(kpmgbigdata)每周六晚8点准时推送一篇原创数据科学文章。我们的作品都由项目经验丰富的博士或资深顾问精心准备,分享结合实际业务的理论应用和心得体会。欢迎大家关注我们的微信公众号,关注原创数据挖掘精品文章;您也可以在公众号中直接发送想说的话,与我们联系交流。 (编辑:海南站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |