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;
输出: