本网站(662p.com)打包出售,且带程序代码数据,662p.com域名,程序内核采用TP框架开发,需要联系扣扣:2360248666 /wx:lianweikj
精品域名一口价出售:1y1m.com(350元) ,6b7b.com(400元) , 5k5j.com(380元) , yayj.com(1800元), jiongzhun.com(1000元) , niuzen.com(2800元) , zennei.com(5000元)
需要联系扣扣:2360248666 /wx:lianweikj
数据分析师的SQL功底该学到什么程度?
BilyLiang · 228浏览 · 发布于2021-08-09 +关注

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


常有朋友问,数据分析师的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) 来实现 :


  1. select top(100) * 

  2.      from ( select  

  3.                          OrderId 

  4.                      ,    OrderMonth 

  5.                       ,    OrderAmount 

  6.                       ,    Row_Number() Over(                                    

  7.                                  OrderBy OrderAmount DESC) 

  8.                              AS Amt_Order 

  9.                  from FctSales) tmp 

  10.       Where Amt_Order between 2000 and 3000 

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


  1. Select    OrderId 

  2.            ,    OrderMonth 

  3.             ,    OrderAmount 

  4.    From FctSales 

  5.   Order by OrderAmount Desc 

  6.   OffSet 2000 ROWS 

  7.   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 子句。


  1. function_name(<arguments>) Over( 

  2.     [ <window partition clause>] 

  3.     [ <window Order clause> 

  4.             [ <window frame clause>] 

  5.     ]) 

Over::


  1. Over( 

  2.             [    <PARTITION BY clause>    ] 

  3.             [    <ORDER BY clause>          ] 

  4.             [    <ROW or RANGE clause>  ] 

  5.     ) 

::窗口中的窗口


  1. ROWS | RANGE 

  2.     BETWEEN  

  3.         UNBOUNDED PRECDEDING  | 

  4.          <N>  PRECEDING     | 

  5.           <N>  FOLLOWING   | 

  6.            CURRENT ROW 

  7.      AND 

  8.             UNBOUNDED FOLLOWING  | 

  9.              <N> PRECEDING  | 

  10.              <N> FOLLOWING  | 

  11.              CURRENT ROW 

举一个例子:


  1. select custid 

  2.    , ordermonth 

  3.    , ordervolume 

  4.     , sum(ordervolume)  

  5.           over(    partition by custid 

  6.                 order by ordermonth asc 

  7.                 rows between     

  8.                          unbounded preceding 

  9.                 and    current row) 

  10.         as cumulatedVolume 

  11. 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()

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


相关推荐

使用SELECT语句检索数据

奔跑的男人 · 806浏览 · 2019-06-03 09:33:43
部署MySQL延迟从库的几个好处

吴振华 · 666浏览 · 2019-05-14 21:57:51
MongoDB凭什么跻身数据库排行前五?

iamitnan · 723浏览 · 2019-06-18 10:04:56
Oracle开启和关闭的几种模式

qq2360248666 · 755浏览 · 2019-06-04 10:18:47
加载中

0评论

评论
我是湖南最靓仔的那条仔,希望来到这里能够交道志同道合的朋友,一起学习,不断进步!!!
分类专栏
小鸟云服务器
扫码进入手机网页