好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

数据分析师的SQL功底该学到什么程度?

常有朋友问, 数据分析师 的 SQL 功底该学到什么程度。今天就先谈谈 T-SQL 中的 Window Function.

Window Function 包含了 4 个大类。分别是:

1 - Rank Function 2 - Aggregate Function 3 - Offset Function 4 - Distribution Function.

1 - Rank Function 平常用到最多

1.1 Rank() Over() 1.2 Row_Number() Over() 1.3 Dense_Rank() Over() 1.4 NTILE(N) Over()

这四个函数,要注意的地方有两点:

a. Rank() Over() 与 Row_Number() Over() :

两者唯一的区别,就在于Row_Number() Over() 真正实现了相同条件的两条或者多条记录是用唯一值来区别的

b. Rank() Over() 与 Dense_Rank() Over() :

这两者的区别,在于他们对位于相同排名之后的名次,是接着相同排名的连续数(Rank) 还是相隔 N 个相同记录个数之后的连续数(Dense_Rank)。

所以 Rank 出来的结果都是连续数字,而 Dense_Rank 出来的结果有可能有跳格数。

c. 除了有用法上的区别外,顺带说说分页的实现:

第一种,我们平常用 Row_Number() 加 Top (N) 来实现 :

select   top (100) *          from  (  select                               OrderId                         ,    OrderMonth                          ,    OrderAmount                          ,    Row_Number() Over(                                                                        OrderBy OrderAmount  DESC )                                  AS  Amt_Order                       from  FctSales) tmp           Where  Amt_Order  between  2000  and  3000 

第二种,SQL Server 2012 之后的新功能:

Select     OrderId                ,    OrderMonth                ,    OrderAmount        From  FctSales       Order   by  OrderAmount  Desc           OffSet 2000  ROWS        Fetch   Next  100  ROWS   Only   

按照量的大小倒序排,取第 2000 条后的记录中前 100 条。

2 - Aggregate Function. 聚合数据

2.1 - Sum() Over() 2.2 - Count() Over() 2.3 - AVG() Over() 2.4 - MIN() Over() 2.5 - MAX() Over()

在使用 Aggregation 函数的时候,唯一要注意的地方就是 Order 子句。

function_name(<arguments>) Over(        [ <window partition clause>]        [ <window  Order  clause>                [ <window frame clause>]        ]) 

Over::

Over(                [    <PARTITION  BY  clause>    ]                [    < ORDER   BY  clause>          ]                [    <ROW  or  RANGE clause>  ]        ) 

::窗口中的窗口

ROWS  | RANGE         BETWEEN              UNBOUNDED PRECDEDING  |             <N>  PRECEDING     |              <N>  FOLLOWING   |                 CURRENT  ROW          AND                 UNBOUNDED FOLLOWING  |                 <N> PRECEDING  |                 <N> FOLLOWING  |                  CURRENT  ROW 

举一个例子:

select  custid       , ordermonth       , ordervolume        ,  sum (ordervolume)               over(    partition  by  custid                     order   by  ordermonth  asc                      rows   between                                  unbounded preceding                     and      current  row)             as  cumulatedVolume      from  FctSales 

统计了截止到目前为止,每一天的累计总量。

3 - Offset Function:定位记录

3.1 Lead() 3.2 LAG() 3.3 First_Value() 3.4 Last_Value() 3.5 Nth_Value()

这一类比较好理解,根据当前的记录,获取前后 N 条数据。

4 - Distribution Function: 分布函数

4.1- PERCENT_RANK() 4.2 - CUME_DIST() 4.3 - PERCENT_COUNT()- 4.4 - PERCENT_DISC()

这一类应用,到目前为止,未用过。适用于财会类的统计。

原文链接:https://mp.weixin.qq.com/s/vnmeSZWEKThfOmHsusDGjA

查看更多关于数据分析师的SQL功底该学到什么程度?的详细内容...

  阅读:19次