Postgresql 11 - 按整数数组索引排序
Postgresql 11 - Order by integer array index
我想根据数组中的 id 顺序在数据库中列出我的产品
我的数组
'{3,2,1}'::int[]
例如
SELECT id FROM product WHERE id = ANY ('{3,2,1}'::int[]);
此查询获取按产品 ID 订购的产品
|id|
|1 |
|2 |
|3 |
但我想列出按数组 ID 索引排序的产品。像这样:
|id|
|3 |
|2 |
|1 |
这可以吗?我该怎么办?
您可以 unnest()
带有选项 WITH ORDINALITY
的数组来跟踪每个元素的索引,将其与 table 连接并将索引用作 ORDER BY
标准:
SELECT p.id
FROM product AS p
INNER JOIN unnest('{3,2,1}'::int[]) WITH ORDINALITY AS a(id, nr)
ON p.id = a.id
ORDER BY a.nr;
您可以使用 array_position()
:
ORDER BY array_position('{3,2,1}'::int[], id)
如果您不想重复数组两次:
select p.id
from product p join
(values ('{3,2,1}'::int[])) v(ar)
on p.id = any(v.ar)
order by array_position(v.ar, p.id);
我想根据数组中的 id 顺序在数据库中列出我的产品
我的数组
'{3,2,1}'::int[]
例如
SELECT id FROM product WHERE id = ANY ('{3,2,1}'::int[]);
此查询获取按产品 ID 订购的产品
|id|
|1 |
|2 |
|3 |
但我想列出按数组 ID 索引排序的产品。像这样:
|id|
|3 |
|2 |
|1 |
这可以吗?我该怎么办?
您可以 unnest()
带有选项 WITH ORDINALITY
的数组来跟踪每个元素的索引,将其与 table 连接并将索引用作 ORDER BY
标准:
SELECT p.id
FROM product AS p
INNER JOIN unnest('{3,2,1}'::int[]) WITH ORDINALITY AS a(id, nr)
ON p.id = a.id
ORDER BY a.nr;
您可以使用 array_position()
:
ORDER BY array_position('{3,2,1}'::int[], id)
如果您不想重复数组两次:
select p.id
from product p join
(values ('{3,2,1}'::int[])) v(ar)
on p.id = any(v.ar)
order by array_position(v.ar, p.id);