📜  PostgreSQL – PERCENT_RANK函数

📅  最后修改于: 2022-05-13 01:57:15.344000             🧑  作者: Mango

PostgreSQL – PERCENT_RANK函数

PostgreSQL 中 PERCENT_RANK()函数用于评估给定值集中的值的相对排名。

PERCENT_RANK()函数的语法:

Syntax:
PERCENT_RANK() OVER (
    [PARTITION BY partition_expression, ... ]
    ORDER BY sort_expression [ASC | DESC], ...
)

我们来分析一下上面的语法:

  • PARTITION BY是用于与PERCENT_RANK()函数来划分的行成多个分区的可选子句。它默认为单个集合。
  • ORDER BY子句用于设置在被返回得到的查询的顺序。
  • PERCENT_RANK()函数总是返回值,该值是大于0且小于或等于1。

示例 1:

首先,创建两个名为 products 和 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);

以下语句使用PERCENT_RANK()函数计算每个员工在 2019 年的销售额百分比:

SELECT 
    name,
    amount,
    PERCENT_RANK() OVER (
        ORDER BY amount
    )
FROM 
    sales_stats
WHERE 
    year = 2019;

输出:

示例 2:

以下语句使用PERCENT_RANK()函数计算 2018 年和 2019 年销售员工的销售额百分比:

SELECT 
    name,
    amount,
    PERCENT_RANK() OVER (
        PARTITION BY year
        ORDER BY amount
    )
FROM 
    sales_stats;

输出: