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


PostgreSQL RANK用法及代碼示例

在PostgreSQL中RANK()函數用於為結果集的每一行分配一個等級。RANK()函數為結果集分區中的每一行分配一個等級。對於每個分區,第一行的等級為1。RANK()函數將綁定行的數量添加到綁定等級中,以計算下一行的等級,因此這些等級可能不是順序的。此外,具有相同值的行將獲得相同的排名。

下麵說明了RANK()函數的語法:

用法:
RANK() OVER (
    [PARTITION BY partition_expression, ... ]
    ORDER BY sort_expression [ASC | DESC], ...
)

讓我們分析以上語法:

  • 首先,PARTITION BY子句將結果集的行分布到應用了RANK()函數的分區中。
  • 然後,ORDER BY子句指定該函數應用到的每個分區中的行順序。

範例1:

首先,創建一個表命名等級包含一列:



CREATE TABLE ranks (
    c VARCHAR(10)
);

現在向其中添加一些數據:

INSERT INTO ranks(c)
VALUES('A'), ('A'), ('B'), ('B'), ('B'), ('C'), ('E');

現在,使用RANK()用於將排名分配給以下結果集中的行的函數等級表:

SELECT
    c,
    RANK () OVER ( 
        ORDER BY c 
    ) rank_number 
FROM
    ranks;

輸出:

範例2:

首先,創建兩個名為product和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);

以下聲明使用RANK()用於通過價格為每個產品分配等級的函數:

SELECT
    product_id,
    product_name,
    price,
    RANK () OVER ( 
        ORDER BY price DESC
    ) price_rank 
FROM
    products;

輸出:

相關用法


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