在 PostgreSQL 中,的DENSE_RANK()函數用於為結果集分區內的每一行分配一個排名,排名值之間沒有差距。這個DENSE_RANK() 為結果集的每個分區中的每一行分配一個等級。與 RANK() 函數不同的是,DENSE_RANK() 函數總是返回連續的排名值。對於每個分區,DENSE_RANK() 函數為具有相同值的行返回相同的排名
下麵顯示了 DENSE_RANK() 函數的語法:
用法: DENSE_RANK() OVER ( [PARTITION BY partition_expression, ... ] ORDER BY sort_expression [ASC | DESC], ... )
DENSE_RANK() 函數應用於 PARTITION BY 子句定義的每個分區中的每一行,按 ORDER BY 子句指定的排序順序。跨越分區邊界時,它會重置排名。 PARTITION BY 子句是可選的。如果跳過它,DENSE_RANK() 函數會將整個結果集視為單個分區。
範例1:
首先,創建一個表命名dense_ranks 有一列:
CREATE TABLE dense_ranks ( c VARCHAR(10) );
現在插入一些數據:
INSERT INTO dense_ranks(c) VALUES('A'), ('A'), ('B'), ('C'), ('C'), ('D'), ('E');
現在查詢來自dense_ranks 表:
SELECT c from dense_ranks;
這將導致以下描述:
四、使用DENSE_RANK()函數為結果集中的每一行分配一個排名:
SELECT c, DENSE_RANK() OVER ( ORDER BY c ) dense_rank_number FROM dense_ranks;
輸出:
範例2:
首先,創建兩個表命名產品展示 和product_groups 進行演示:
CREATE TABLE product_groups ( group_id serial PRIMARY KEY, group_name VARCHAR (255) NOT NULL ); CREATE TABLE products ( product_id serial PRIMARY KEY, product_name VARCHAR (255) NOT NULL, price DECIMAL (11, 2), group_id INT NOT NULL, FOREIGN KEY (group_id) REFERENCES product_groups (group_id) );
現在將一些數據插入表中:
INSERT INTO product_groups (group_name) VALUES ('Smartphone'), ('Laptop'), ('Tablet'); INSERT INTO products (product_name, group_id, price) VALUES ('Microsoft Lumia', 1, 200), ('HTC One', 1, 400), ('Nexus', 1, 500), ('iPhone', 1, 900), ('HP Elite', 2, 1200), ('Lenovo Thinkpad', 2, 700), ('Sony VAIO', 2, 700), ('Dell Vostro', 2, 800), ('iPad', 3, 700), ('Kindle Fire', 3, 150), ('Samsung Galaxy Tab', 3, 200);
下麵的語句使用DENSE_RANK()按標價對產品進行排名的函數:
SELECT product_id, product_name, price, DENSE_RANK () OVER ( ORDER BY price DESC ) price_rank FROM products;
輸出:
相關用法
- PostgreSQL ARRAY_AGG()用法及代碼示例
- PostgreSQL AVG()用法及代碼示例
- PostgreSQL COUNT()用法及代碼示例
- PostgreSQL STRING_AGG()用法及代碼示例
- PostgreSQL MAX()用法及代碼示例
- PostgreSQL MIN()用法及代碼示例
- PostgreSQL SUM()用法及代碼示例
- PostgreSQL NULLIF()用法及代碼示例
- PostgreSQL Drop用法及代碼示例
- PostgreSQL FIRST_VALUE用法及代碼示例
- PostgreSQL LAST_VALUE用法及代碼示例
- PostgreSQL LEAD用法及代碼示例
- PostgreSQL NTILE用法及代碼示例
- PostgreSQL CUME_DIST用法及代碼示例
- PostgreSQL RANK用法及代碼示例
- PostgreSQL ROW_NUMBER用法及代碼示例
- PostgreSQL PERCENT_RANK用法及代碼示例
注:本文由純淨天空篩選整理自RajuKumar19大神的英文原創作品 PostgreSQL- DENSE_RANK Function。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。