APP下载

SQL 资料分析应用示例

消息来源:baojiabao.com 作者: 发布时间:2024-05-19

报价宝综合消息SQL 资料分析应用示例

来自:林骥 id:linjiwx

SQL 全名是结构化查询语言(Structured Query Language),主要用于查询、更新和管理关系数据库系统。作为资料分析师,SQL 应用最多的是其查询功能,即用 SELECT 语句来检索资料表中所需的资料。

在不同的数据库系统中,SQL 语法有些差异,但基本思路应该一致。本文将基于 Oracle 数据库,介绍一些 SQL 资料分析应用示例。

首先,我们看一看常用的聚集函式,即将一列中所有的值聚集为单个值的函式。

1、记数:count

2、总和:sum

3、平均值:avg

4、最大值:max

5、最小值:min

6、方差:variance

7、标准差:stddev

8、排名:rank

下面举一个综合应用聚集函式的例子。

假如在订单表(orders)中,订单号字段为 orderid,订单总金额字段为 totalprice,金额为空值代表为 0,业务需求是:查询订购时间(crdt)在过去 10 个月中每个月每种订单型别的订单数、总金额、平均每单金额(最多保留两位小数)、最大订单金额、最小订单金额、方差、标准差、总金额月度排名,输出订单数大于 1000 个的订单型别,并按月份升序、总金额降序排列。

参考 SQL 语句如下:

select to_char(a.crdt,\'yyyy-mm\') as 月份, a.ordertype as 订单型别, count(distinct a.orderid) as 订单数,sum(nvl(a.totalprice, 0)) as 总金额, round(avg(nvl(a.totalprice, 0)), 2) as 平均每单金额, max(nvl(a.totalprice, 0)) as 最大订单金额, min(nvl(a.totalprice, 0)) as 最小订单金额, variance(nvl(a.totalprice, 0)) as 方差, stddev(nvl(a.totalprice, 0)) as 标准差, rank over (partitionby to_char(a.crdt,\'yyyy-mm\') orderbysum(nvl(a.totalprice, 0)) desc) as 排名from orders awhere a.crdt >= add_months(trunc(sysdate,\'mm\'), -10)and a.crdt groupby to_char(a.crdt,\'yyyy-mm\'), a.ordertypehavingcount(distinct a.orderid) > 1000orderby to_char(a.crdt,\'yyyy-mm\'), sum(nvl(a.totalprice, 0)) desc根据实际的业务需求变化情况,上面的 rank 函式可以换成 dense_rank 或 row_number 。

1、字串撷取:substr

selectsubstr(\'abcdef\',1,3) from dual; 结果:abc

2、查询子串位置:instr

selectinstr(\'abcfdgfdhd\',\'fd\') from dual; 结果:4

3、字串连线:concat

selectconcat(\'Hello\',\' world\') from dual; 结果:Hello world

4、去掉空格:ltrim、rtrim、trim

selectltrim(\' abc\') s1, rtrim(\'def \') s2, trim(\' ghi \') s3 from dual; 结果:abc, def, ghi

5、去掉前导和字尾:trim

selecttrim(leading9from998799) s1,trim(trailing 9from998799) s2,trim(9from998799) s3 from dual; 结果:8799, 9987, 87

6、返回字串首字母的ascii值:ascii

selectascii(\'A\') from dual; 结果:65

7、返回ascii值对应的字母:chr

selectchr(\'65\') from dual; 结果:A

8、计算字串长度:length

selectlength(\'abcdef\') from dual; 结果:6

9、大小写转换:lower, upper, initcap

示例:

upper(\'dEf\') s2, 结果:abc, DEF, Ghi

10、匹配替换:replace

selectreplace(\'abcd\',\'bc\',\'xyz\') from dual; 结果:axyzd

11、绝对匹配替换:translate

selecttranslate(\'What\',\'th\',\'T-\') from dual; 结果:W-aT

说明:replace 是将字串中指定的连续字元替换成其它字元,translate 则是将各个字元替换成顺序与其相同的字元。

12、左右填充:lpad, rpad

selectlpad(\'ab\',5,\'=\') s1, rpad(\'ab\',6,\'*\') s2 from dual; 结果:===ab, ab****

13、指令解码:decode

selectdecode(\'a\',\'b\',\'1\',\'c\',\'2\',\'3\') from dual; 结果:3

最后,我们了解一些常用的运算子,主要用于处理资料之间的运算、比较、筛选等。

1、算术运算子:

+, -, *, /

2、比较运算子:

>, >=, =, != 或 ,

3、逻辑运算子:

not, and, or

4、集合运算子:

intersect, union, union all, minus

5、连线运算子:

||

SQL 还有很多比较高阶的应用知识,例如:建立表、插入表、删除表、建立函式、储存过程、包、型别、定时任务、游标、触发、索引、约束、物化检视、DBLink 等等,这些往往是 DBA 或软件开发人员需要掌握的知识,但做资料分析的时候,如果能适当地掌握一些 SQL 高阶应用知识,有时能非常明显地提升工作效率。本文限于篇幅和时间,就不展开讨论了。

最后推荐一门资料分析师必备的SQL课程

2019-12-16 20:58:00

相关文章