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

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

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

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

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

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

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

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

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

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

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

網(wǎng)友評(píng)論