📜  PostgreSQL – FIRST_VALUE函数

📅  最后修改于: 2022-05-13 01:57:14.962000             🧑  作者: Mango

PostgreSQL – FIRST_VALUE函数

PostgreSQL 中, FIRST_VALUE ()函数用于返回结果集的排序分区中的第一个值。

Syntax:
FIRST_VALUE ( expression )  
OVER ( 
    [PARTITION BY partition_expression, ... ]
    ORDER BY sort_expression [ASC | DESC], ...
)

我们来分析一下上面的语法:

  • 表达式负责根据查询结果集的排序分区的第一行的值评估值。它可以是必须评估单个整数值的表达式、列或子查询。
  •   PARTITION BY 子句用于划分结果集中的行。
  • ORDER BY子句用于将行中的每个分区中的查询结果集进行排序。
  • rows_range_clause通过建立查询集分区的开始和结束用于限制行的分区内部。

示例 1:

首先,创建两个名为Mammals 的 Animal_groups 演示:

CREATE TABLE Animal_groups (
    animal_id serial PRIMARY KEY,
    animal_name VARCHAR (255) NOT NULL
);

CREATE TABLE Mammals (
    mammal_id serial PRIMARY KEY,
    mammal_name VARCHAR (255) NOT NULL,
    lifespan DECIMAL (11, 2),
    animal_id INT NOT NULL,
    FOREIGN KEY (animal_id) REFERENCES Animal_groups (animal_id)
);

现在向表中插入一些数据:



INSERT INTO Animal_groups (animal_name)
VALUES
    ('Terrestrial'),
    ('Aquatic'),
    ('Winged');

INSERT INTO Mammals(mammal_name, animal_id, lifespan)
VALUES
    ('Cow', 1, 10),
    ('Dog', 1, 7),
    ('Ox', 1, 13),
    ('Wolf', 1, 11),
    ('Blue Whale', 2, 80),
    ('Dolphin', 2, 5),
    ('Sea Horse', 2, 3),
    ('Octopus', 2, 8),
    ('Bat', 3, 4),
    ('Flying Squirrels', 3, 1),
    ('Petaurus', 3, 2);

以下语句使用FIRST_VALUE()函数返回所有哺乳动物以及寿命最短的哺乳动物:

SELECT 
    mammal_id,
    mammal_name,
    mammal_id,
    lifespan,
    FIRST_VALUE(mammal_name) 
    OVER(
        ORDER BY lifespan
    ) lowest_lifespan
FROM 
    Mammals;

输出:

示例 2:

以下语句使用FIRST_VALUE()函数返回按动物组分组的所有哺乳动物。对于每个动物组,它返回寿命最短的哺乳动物:

SELECT 
    mammal_id,
    mammal_name,
    mammal_id,
    lifespan,
    FIRST_VALUE(mammal_name) 
    OVER(
    PARTITION BY animal_id
        ORDER BY lifespan
        RANGE BETWEEN 
            UNBOUNDED PRECEDING AND 
            UNBOUNDED FOLLOWING
    ) lowest_lifespan
FROM 
    Mammals;

输出: