PostgreSQL – ROW_NUMBER函数
在PostgreSQL 中, ROW_NUMBER()函数用于为查询返回的每一行分配一个唯一的整数。
Syntax:
ROW_NUMBER() OVER(
[PARTITION BY column_1, column_2, …]
[ORDER BY column_3, column_4, …]
)
我们来分析一下上面的语法:
- ROW_NUMBER()函数操作的行集称为窗口。
- 分区BY子句用于分隔查询的结果集。
- OVER子句中的ORDER BY子句用于设置查询结果的显示顺序。
示例 1:
首先,创建两个名为哺乳动物和动物组的表:
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);
在以下查询中,我们将ORDER BY子句中的列更改为 product_name, ROW_NUMBER()函数根据产品名称顺序为每一行分配整数值
SELECT
mammal_id,
mammal_name,
animal_id,
ROW_NUMBER () OVER (
ORDER BY mammal_name
)
FROM
Mammals;
输出:
示例 2:
以下查询使用ROW_NUMBER()函数为产品表中的不同价格分配整数:
SELECT DISTINCT
lifespan,
ROW_NUMBER () OVER (ORDER BY lifespan)
FROM
Mammals
ORDER BY
lifespan;
输出: