最近使用窗口函數(shù)的頻率越來越高,這里打算簡單介紹一下幾個排序的函數(shù),做一個引子希望以后這方面的問題能夠更深入的理解,這里先簡單介紹一下幾個簡單的排序函數(shù)及其相關子句,這里先從什么是排序開始吧。

排序函數(shù)是做什么的?

    排序函數(shù)的作用是基于一個結(jié)果集返回一個排序值。排序值就是一個數(shù)字,這個數(shù)字是典型的以1開始且自增長為1的行值。由ranking函數(shù)決定排序值可以使唯一的對于當前結(jié)果集,或者某些行數(shù)據(jù)有相同的排序值。在接下來我將研究不同的排序函數(shù)以及如何使用這些函數(shù)。

使用RANK函數(shù)的例子

    RANK函數(shù)每個分區(qū)的排序都是從1開始?!皃artition”是一組有相同指定分區(qū)列值的數(shù)據(jù)行的集合。如果一個分區(qū)中有相同排序列的值(這個列指定在ORDER BY后面),然后相同排序列值的行將會分配給相同的排序值。有點繞口,為了更好的理解,如何使用,讓我們看下下面的語法:

RANK ( ) OVER ( [ PARTITION BY <partition_column> ] ORDER BY <order_by_column> )

這里有幾個參數(shù):

  • <partition_column>: 指定一個或者多個列名作為分區(qū)數(shù)據(jù)
  • <order by column>: 確定一個或者多個列然后用來對每個分區(qū)的輸出數(shù)據(jù)進行排序
注意:

PARTITION BY子句是一個可選項。如是不使用,數(shù)據(jù)將按照一個分區(qū)對所有數(shù)據(jù)進行排序。如果指定了PARTITION BY子句,則每個分區(qū)的數(shù)據(jù)集都各自進行從1開始的排序。

現(xiàn)在對RANK函數(shù)的語法和如何工作有了一定的理解,下面運行一對該函數(shù)的例子。需要說明一下我的例子的運行環(huán)境都是AdventureWorks2012 數(shù)據(jù)庫,可以從網(wǎng)絡上下載這里給出一個下載地址http://msftdbprodsamples.codeplex.com/releases/view/93587。

下面是第一個使用RANK函數(shù)的例子: