排名函式是sql server2005新增的函式。排名函式總共有四種,分別是:row_number、rank、 dense_rank 、ntile。
row_number:順序生成序號。
rank:相同的序值序號相同,但序號會跳號。
dense_rank :相同的序值序號相同,序號順序遞增。
ntile:裝桶,把記錄分成指的桶數,編序號。
下面分別介紹一下這四個排名函式的功能及用法。在介紹之前假設有乙個t_table表,表結構與表中的資料如圖1所示:
圖1其中field1欄位的型別是int,field2欄位的型別是varchar。
一、row_number
row_number函式的用途是非常廣泛,這個函式的功能是為查詢出來的每一行記錄生成乙個序號。row_number函式的用法如下面的sql語句所示:
select row_number() over(order by field1) as row_number,* from t_table
上面的sql語句的查詢結果如圖2所示。
圖2其中row_number列是由row_number函式生成的序號列。在使用row_number函式是要使用over子句選擇對某一列進行排序,然後才能生成序號。
實際上,row_number函式生成序號的基本原理是先使用over子句中的排序語句對記錄進行排序,然後按著這個順序生成序號。over子句中的order by子句與sql語句中的order by子句沒有任何關係,這兩處的order by 可以完全不同,如下面的sql語句所示:
select row_number() over(order by field2 desc) as row_number,* from t_table order by field1 desc
上面的sql語句的查詢結果如圖3所示。
圖3我們可以使用row_number函式來實現查詢表中指定範圍的記錄,一般將其應用到web應用程式的分頁功能上。下面的sql語句可以查詢t_table表中第2條和第3條記錄:
with t_rowtable
as
(
select row_number() over(order by field1) as row_number,* from t_table
)
select * from t_rowtable where row_number>1 and row_number
上面的sql語句的查詢結果如圖4所示。
圖4另外要注意的是,如果將row_number函式用於分頁處理,over子句中的order by 與排序記錄的order by 應相同,否則生成的序號可能不是有續的。
二、rank
rank函式考慮到了over子句中排序字段值相同的情況,為了更容易說明問題,在t_table表中再加一條記錄,如圖5所示。
圖5
select rank() over(order by field1),* from t_table order by field1
上面的sql語句的查詢結果如圖6所示。
圖6三、dense_rank
dense_rank函式的功能與rank函式類似,只是在生成序號時是連續的,而rank函式生成的序號有可能不連續。如上面的例子中如果使用dense_rank函式,第4條記錄的序號應該是2,而不是4。如下面的sql語句所示:
select dense_rank() over(order by field1),* from t_table order by field1
面的sql語句的查詢結果如圖7所示。
圖7四、ntile
ntile函式可以對序號進行分組處理。這就相當於將查詢出來的記錄集放到指定長度的陣列中,每乙個陣列元素存放一定數量的記錄。ntile函式為每條記錄生成的序號就是這條記錄所有的陣列元素的索引(從1開始)。也可以將每乙個分配記錄的陣列元素稱為「桶」。ntile函式有乙個引數,用來指定桶數。下面的sql語句使用ntile函式對t_table表進行了裝桶處理:
select ntile(4) over(order by field1) as bucket,* from t_table
上面的sql語句的查詢結果如圖8所示。
圖8由於t_table表的記錄總數是6,而上面的sql語句中的ntile函式指定了桶數為4。
四種定址方式
直接在指令中給出運算元,不需要儲存單元,執行速度快,但是顯然資料也不能冗長,通用型性差,一般用來指定一些要求不高的整形整數。運算元 於暫存器,結果也寫回暫存器。顯然這個主要用到暫存器,這也是他的名字的由來。指令給出有效位址,這使得位址碼會很長,通用性也差。指令中給出的是運算元位址的位址,顯然就是要根...
四種監控方式
四種方式 logging tracing metrics healthcheck 1 研發成本來說 logging 比較低 metrics 一般 tracing比較高 2 運維成本來說 logging 比較高 3 相應能力來 metrics 比較好 4 解決問題來說 tracing 比較好 logg...
nocache的四種方式
nocache的四種方式 1.cdn的推方式 2.客戶端url方式 css需加a.css?2010.css 3.html cache meta 4.服務端cache 6.iis http頭式,建立虛擬目錄 以下 在asp頁面首部加入 複製內容到剪貼簿 response.buffer true res...