當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


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