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

排序函數是做什么的?

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

使用RANK函數的例子

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

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

這里有幾個參數:

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

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

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

下面是第一個使用RANK函數的例子: