在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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。