sql server 2008數據庫練習拆解-2 按成績排名

數據用前  sql server 2008數據庫練習拆解-1

1、要用到的函數  DENSE_RANK (Transact-SQL) 

  作用:返回結果集分區中行的排名,在排名中沒有任何間斷。行的排名等於所討論行之前的所有排名數加一。

語法:

DENSE_RANK ( )    OVER ( [ <partition_by_clause> ] < order_by_clause > )
 

參數
<partition_by_clause> ----------------->>就是分組
將 FROM 子句生成的結果集劃分爲數個應用 DENSE_RANK 函數的分區。若要了解 PARTITION BY 語法,請參閱 OVER 子句 (Transact-SQL)。

<order_by_clause>
確定將 DENSE_RANK 值應用於分區中各行的順序。整數不能表示排名函數中使用的 <order_by_clause> 中的列。

返回類型
bigint 

註釋
如果有兩個或多個行受同一個分區中排名的約束,則每個約束行將接收相同的排名。例如,如果兩位頂尖銷售員具有相同的 SalesYTD 值,則他們將並列第一。接下來 SalesYTD 最高的銷售人員排名第二。該排名等於該行之前的所有行數加一。因此,DENSE_RANK 函數返回的數字沒有間斷,並且始終具有連續的排名。

整個查詢所用的排序順序確定了各行在結果中的顯示順序。這說明排名第一的行可以不是分區中的第一行。


其中  OVEROVER的語法:

  

Ranking Window Functions 
< OVER_CLAUSE > :: =
    OVER ( [ PARTITION BY value_expression , ... [ n ] ]
           <ORDER BY_Clause> )

Aggregate Window Functions 
< OVER_CLAUSE > :: = 
    OVER ( [ PARTITION BY value_expression , ... [ n ] ] )

 

參數
PARTITION BY
將結果集分爲多個分區。開窗函數分別應用於每個分區,併爲每個分區重新啓動計算。

value_expression 
指定對相應 FROM 子句生成的行集進行分區所依據的列。value_expression 只能引用通過 FROM 子句可用的列。value_expression 不能引用選擇列表中的表達式或別名。value_expression 可以是列表達式、標量子查詢、標量函數或用戶定義的變量。

<ORDER BY 子句> 
指定應用排名開窗函數的順序。有關詳細信息,請參閱 ORDER BY 子句 (Transact-SQL)。

重要提示: 
在排名開窗函數的上下文中使用時,<ORDER BY 子句> 只能引用通過 FROM 子句可用的列。無法指定整數來表示選擇列表中列名稱或列別名的位置。<ORDER BY 子句>不能與聚合開窗函數一起使用。 
 


示例
以下示例返回各位置上產品數量的 DENSE_RANK。注意,OVER 子句中的 ORDER BY 對 DENSE_RANK 進行排序,SELECT 語句的 ORDER BY 對結果集進行排序。


USE AdventureWorks2008R2;
GO
SELECT i.ProductID, p.Name, i.LocationID, i.Quantity, 
    DENSE_RANK() OVER (PARTITION BY i.LocationID ORDER BY i.Quantity)     AS DENSE_RANK
FROM Production.ProductInventory i 
    INNER JOIN Production.Product p 
        ON i.ProductID = p.ProductID
ORDER BY Name;
GO

select t.* , 排名= DENSE_RANK() over(partition by cid order by score desc) from sc t order by t.CID ,排名

結果

SID    CID    score    排名


01    01    80.0    1
03    01    80.0    1
05    01    76.0    2
02    01    70.0    3
04    01    50.0    4
06    01    31.0    5
01    02    90.0    1
07    02    89.0    2
05    02    87.0    3
03    02    80.0    4
02    02    60.0    5
04    02    30.0    6
01    03    99.0    1
07    03    98.0    2
02    03    80.0    3
03    03    80.0    3
06    03    34.0    4
04    03    20.0    5

看清:CID=01 中有重複第一名

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章