当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


PostgreSQL NTILE用法及代码示例


在PostgreSQL中,NTILE()函数用于将分区中的有序行划分为指定数量的已排序存储桶。PostgreSQL NTILE()函数允许用户将分区中的有序行划分为指定数量的分级组,并使其大小尽可能相等。这些排名的组称为存储桶。 NTILE()函数为每个组分配一个从1开始的存储桶号。对于组中的每一行,NTILE()函数分配一个存储桶号,该存储桶号代表该行所属的组。

NTILE()函数的语法如下:

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

让我们分析以上语法:

  • 这个水桶代表排名组的数量。它可以是数字或表达式,每个分区的计算结果为正整数值(大于0)。的水桶不能为空。
  • PARTITION BY子句将行分布到应用了该函数的分区中。 PARTITION 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;

输出:

相关用法


注:本文由纯净天空筛选整理自RajuKumar19大神的英文原创作品 PostgreSQL – NTILE Function。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。