在本教學中,將學習如何使用SQL Server DENSE_RANK()
函數為結果集的分區中的每一行分配排名,並且排名值沒有間隙。
SQL Server DENSE_RANK()函數簡介
DENSE_RANK()
是一個Windows函數,它為結果集的分區中的每一行分配一個排名。 與RANK()
函數不同,DENSE_RANK()
函數返回連續的排名值。 如果每個分區中的行具有相同的值,則它們將獲得相同的排名。
DENSE_RANK()
函數的語法如下:
DENSE_RANK() OVER (
[PARTITION BY partition_expression, ... ]
ORDER BY sort_expression [ASC | DESC], ...
)
DENSE_RANK()
函數以ORDER BY
子句定義的指定順序應用於PARTITION BY
子句定義的每個分區的行。它會在劃分分區邊界時重置等級。
PARITION BY
子句是可選的。如果省略它,該函數會將整個結果集視為單個分區。
SQL Server DENSE_RANK()函數描述
以下語句創建一個名為dense_rank_demo
的新表,並在該表中插入一些行:
CREATE TABLE sales.dense_rank_demo (
v VARCHAR(10)
);
INSERT INTO sales.dense_rank_demo(v)
VALUES('A'),('B'),('B'),('C'),('C'),('D'),('E');
SELECT
*
FROM
sales.dense_rank_demo;
以下語句使用DENSE_RANK()
和RANK()
函數為結果集的每一行分配一個排名:
SELECT
v,
DENSE_RANK() OVER (
ORDER BY v
) my_dense_rank,
RANK() OVER (
ORDER BY v
) my_rank
FROM
sales.dense_rank_demo;
執行上面查詢語句,得到以下結果:
SQL Server DENSE_RANK()函數示例
下麵將使用production.products
表來演示DENSE_RANK()
函數:
1. SQL Server DENSE_RANK()在結果集中使用示例
以下示例使用DENSE_RANK()
函數按價格對產品進行排名:
SELECT
product_id,
product_name,
list_price,
DENSE_RANK () OVER (
ORDER BY list_price DESC
) price_rank
FROM
production.products;
執行上面查詢語句,得到以下結果:
2. SQL Server DENSE_RANK()在分區上使用示例
以下語句按價格對每個類別中的產品進行排名。它按照價格僅返回每個類別的前3
個產品。
SELECT * FROM (
SELECT
product_id,
product_name,
category_id,
list_price,
DENSE_RANK () OVER (
PARTITION BY category_id
ORDER BY list_price DESC
) price_rank
FROM
production.products
) t
WHERE price_rank < 3;
執行上面查詢語句,得到以下結果:
在本教學中,學習了如何使用SQL Server DENSE_RANK()
函數為結果集的分區中的每一行分配排名,並且排名值沒有間隙。
上一篇:
SQL Server Window函數
下一篇:無