我有以下Postgres查询:
SELECT array_agg("Esns".id )
FROM public."Esns",
public."PurchaseOrderItems"
WHERE
"Esns"."PurchaseOrderItemId" = "PurchaseOrderItems".id
AND "PurchaseOrderItems"."GradeId"=2
LIMIT 2;
限制将影响行。我希望它将array_agg()
限制为2项。以下查询有效,但我在输出中输入每个条目:
SELECT array_agg ("temp")
FROM (
SELECT "Esns".id
FROM public."Esns",
public."PurchaseOrderItems"
WHERE
"Esns"."PurchaseOrderItemId" = "PurchaseOrderItems".id
AND "PurchaseOrderItems"."GradeId"=2
LIMIT 4
) as "temp" ;
这给我以下输出
{(13),(14),(15),(12)}
有什么想法吗?
答案 0 :(得分:7)
select id[1], id[2]
from (
SELECT array_agg("Esns".id ) as id
FROM public."Esns",
public."PurchaseOrderItems"
WHERE
"Esns"."PurchaseOrderItemId" = "PurchaseOrderItems".id
AND "PurchaseOrderItems"."GradeId"=2
) s
或者如果您希望输出为数组:
SELECT (array_agg("Esns".id ))[1:2] as id_array
FROM public."Esns",
public."PurchaseOrderItems"
WHERE
"Esns"."PurchaseOrderItemId" = "PurchaseOrderItems".id
AND "PurchaseOrderItems"."GradeId"=2
答案 1 :(得分:2)
结果中的引号是行类型的装饰器。您没有构建整行数组(恰好包含单个列)。请改用列。
此外,从查询结果中直接array construction通常更简单,更快捷:
SELECT ARRAY (
SELECT e.id
FROM public."Esns" e
JOIN public."PurchaseOrderItems" p ON p.id = e."PurchaseOrderItemId"
WHERE p."GradeId" = 2
-- ORDER BY ???
LIMIT 4 -- or 2?
)
如果您想获得稳定的结果和/或选择某些行,则需要ORDER BY
。否则结果是任意的,并且可以随时改变。
在使用它时,我使用显式JOIN语法重写了查询,这通常是优选的,并使用别名来简化。