在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;
输出:
相关用法
- PostgreSQL ARRAY_AGG()用法及代码示例
- PostgreSQL AVG()用法及代码示例
- PostgreSQL COUNT()用法及代码示例
- PostgreSQL STRING_AGG()用法及代码示例
- PostgreSQL MAX()用法及代码示例
- PostgreSQL MIN()用法及代码示例
- PostgreSQL SUM()用法及代码示例
- PostgreSQL DENSE_RANK用法及代码示例
- PostgreSQL NULLIF()用法及代码示例
- PostgreSQL Drop用法及代码示例
- PostgreSQL FIRST_VALUE用法及代码示例
- PostgreSQL LAST_VALUE用法及代码示例
- PostgreSQL LEAD用法及代码示例
- PostgreSQL CUME_DIST用法及代码示例
- PostgreSQL RANK用法及代码示例
注:本文由纯净天空筛选整理自RajuKumar19大神的英文原创作品 PostgreSQL – NTILE Function。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。