2012-09-19 14 views
6

मैं निम्नलिखित Postgres प्रश्न हैं:सेट सीमा array_agg करने के लिए()

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)} 

कोई भी विचार दे सकता है?

उत्तर

6
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 
+0

बिल्कुल सही। धन्यवाद। दूसरा जवाब वह है जिसे मैं ढूंढ रहा था क्योंकि मुझे एक सरणी चाहिए और मैं सीमा पर ऊपरी सीमा को गतिशील रूप से सेट करने में सक्षम होना चाहता हूं। धन्यवाद। – user1175817

+0

अच्छा है। दूसरा उदाहरण स्पॉट पर है! –

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 कुछ करने की जरूरत है आप एक स्थिर परिणाम चाहते हैं और/या कुछ पंक्तियों लेने हैं। अन्यथा परिणाम मनमानी है और किसी भी समय बदल सकता है।

इस पर होने पर मैं स्पष्ट जॉइन सिंटैक्स के साथ क्वेरी को फिर से लिखता हूं, जो आम तौर पर बेहतर होता है, और सरल बनाने के लिए उपनामों का उपयोग किया जाता है।

संबंधित मुद्दे