📜  PostgreSQL – NTILE函数

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

PostgreSQL – NTILE函数

PostgreSQL,所述NTILE()函数是用于将命令在分隔行到排桶的指定次数。桶不是按排名的组。

NTILE() 的语法如下所示:

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

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

  • 铲斗排组的数量。它可以是数字或表达式,但表达式必须计算正整数值。
  • PARTITION BY 是一个可选子句,用于将行分布到分区中。
  • ORDER BY子句是用来在每个分区行进行排序。

示例 1:

首先创建一个名为sales_stats的表 存储员工的销售收入:



CREATE TABLE sales_stats(
    name VARCHAR(100) NOT NULL,
    year SMALLINT NOT NULL CHECK (year > 0),
    amount DECIMAL(10, 2) CHECK (amount >= 0),
    PRIMARY KEY (name, year)
);

其次,在sales_stats 中插入一些行 桌子:

INSERT INTO 
    sales_stats(name, year, amount)
VALUES
    ('Raju kumar', 2018, 120000),
    ('Alibaba', 2018, 110000),
    ('Gabbar Singh', 2018, 150000),
    ('Kadar Khan', 2018, 30000),
    ('Amrish Puri', 2018, 200000),
    ('Raju kumar', 2019, 150000),
    ('Alibaba', 2019, 130000),
    ('Gabbar Singh', 2019, 180000),
    ('Kadar Khan', 2019, 25000),
    ('Amrish Puri', 2019, 270000);

以下语句使用NTILE()函数将行分配到 3 个存储桶中:

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

输出:

示例 2:

下面的查询 使用NTILE()函数在sales_stats 中划分行 表分为两个分区和每个分区 3 个桶:

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

输出: