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