當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


PostgreSQL DENSE_RANK用法及代碼示例

在 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;

輸出:

相關用法


注:本文由純淨天空篩選整理自RajuKumar19大神的英文原創作品 PostgreSQL- DENSE_RANK Function。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。