

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# DENSE\$1RANK 範圍函數
<a name="WF_DENSE_RANK"></a>

DENSE\$1RANK 範圍函數根據 OVER 子句中的 ORDER BY 表達式，決定一組值之中某個值的排名。如果有選用的 PARTITION BY 子句，則會重設每一組列的排名。在排名準則中有相等值的列獲得相同排名。DENSE\$1RANK 函數有一方面不同於 RANK：如果兩列以上繫結在一起，則排名值的序列中沒有間隙。例如，假設兩列都排名 1，則下一個排名為 2。

在相同查詢中，排名函數可以搭配不同的 PARTITION BY 和 ORDER BY 子句。

## 語法
<a name="WF_DENSE_RANK-synopsis"></a>

```
DENSE_RANK () OVER
(
[ PARTITION BY expr_list ]
[ ORDER BY order_list ]
)
```

## 引數
<a name="WF_DENSE_RANK-arguments"></a>

( )   
此函數不接受引數，但需要空括號。

OVER   
DENSE\$1RANK 函數的視窗子句。

PARTITION BY *expr\$1list*   
選用。一或多個用於定義視窗的表達式。

ORDER BY *order\$1list*   
選用。排名值所根據的表達式。如果未指定 PARTITION BY，ORDER BY 會使用整個資料表。如果省略 ORDER BY，所有列的傳回值為 1。  
如果 ORDER BY 未產生唯一排序，則列的順序不確定。如需詳細資訊，請參閱[範圍函數的資料唯一排序](Window_functions.md#Examples_order_by_WF)。

## 傳回類型
<a name="Supported_data_types_wf_dense_rank"></a>

INTEGER

## 範例
<a name="WF_DENSE_RANK-examples"></a>

下列範例會依銷售數量排序資料表 （以遞減順序），並將密集排名和一般排名指派給每一列。套用範圍函數結果之後排序結果。

```
select salesid, qty,
dense_rank() over(order by qty desc) as d_rnk,
rank() over(order by qty desc) as rnk
from winsales
order by 2,1;

salesid | qty | d_rnk | rnk
---------+-----+-------+-----
10001 |  10 |     5 |   8
10006 |  10 |     5 |   8
30001 |  10 |     5 |   8
40005 |  10 |     5 |   8
30003 |  15 |     4 |   7
20001 |  20 |     3 |   4
20002 |  20 |     3 |   4
30004 |  20 |     3 |   4
10005 |  30 |     2 |   2
30007 |  30 |     2 |   2
40001 |  40 |     1 |   1
(11 rows)
```

在相同查詢中同時使用 DENSE\$1RANK 和 RANK 函數時，請注意指派給相同列集的排名差異。如需 WINSALES 資料表的描述，請參閱[範圍函數範例的範例資料表](Window_functions.md#Window_function_example)。

下列範例會依 SELLERID 分割資料表，並依數量排序每個分割區 （以遞減順序），並將密集排名指派給每一列。套用範圍函數結果之後排序結果。

```
select salesid, sellerid, qty,
dense_rank() over(partition by sellerid order by qty desc) as d_rnk
from winsales
order by 2,3,1;

salesid | sellerid | qty | d_rnk
---------+----------+-----+-------
10001 |        1 |  10 |     2
10006 |        1 |  10 |     2
10005 |        1 |  30 |     1
20001 |        2 |  20 |     1
20002 |        2 |  20 |     1
30001 |        3 |  10 |     4
30003 |        3 |  15 |     3
30004 |        3 |  20 |     2
30007 |        3 |  30 |     1
40005 |        4 |  10 |     2
40001 |        4 |  40 |     1
(11 rows)
```

 如需 WINSALES 資料表的描述，請參閱[範圍函數範例的範例資料表](Window_functions.md#Window_function_example)。