我有以下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)}
有任何想法吗?
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
在结果中,引号是该行式装饰。 您还没有建立完整行(其中会包含一列)的阵列。 使用列来代替。
此外,直接的阵列结构从查询结果通常是简单,更快捷:
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语法,这是通常优选,并用于别名来简化。