PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

कस्टम कुल फ़ंक्शन के लिए NULL से अधिकतम लंबाई तक पैड सरणियाँ

कस्टम समग्र फ़ंक्शन का उपयोग करना array_agg_mult() जैसे इस संबंधित उत्तर में परिभाषित किया गया है:

आपका अपेक्षित परिणाम असंभव है:

{{1},NULL,{abc}}

होना ही होगा:

{{1},{NULL},{abc}}

0 या 1 सरणी तत्वों वाला साधारण मामला

साधारण मामले के लिए केवल खाली सरणी को बदलने के लिए:आप इसे प्राप्त कर सकते हैं:

WITH t(arr) AS (
    VALUES
      ('{1}'::text[])
     ,('{}')
     ,('{abc}')
   )
SELECT array_agg_mult(ARRAY[CASE WHEN arr = '{}' THEN '{NULL}' ELSE arr END])
FROM   t;

n तत्वों के लिए डायनामिक पैडिंग

array_fill() Using का उपयोग करना अधिकतम लंबाई तक NULL तत्वों के साथ सरणियों को पैड करने के लिए:

SELECT array_agg_mult(ARRAY[
         arr || array_fill(NULL::text
                         , ARRAY[max_elem - COALESCE(array_length(arr, 1), 0)])
       ]) AS result
FROM   t, (SELECT max(array_length(arr, 1)) AS max_elem FROM t) t1;

अभी भी केवल 1-आयामी . के लिए काम करता है बुनियादी सरणियाँ।

व्याख्या करें

  • सबक्वायरी t1 बुनियादी 1-आयामी सरणी की अधिकतम लंबाई की गणना करता है।
  • COALESCE(array_length(arr, 1), 0) इस पंक्ति में सरणी की लंबाई की गणना करता है।
    COALESCE 0 . पर डिफ़ॉल्ट NULL . के लिए ।
  • लंबाई में अंतर के लिए array_fill() . के साथ पैडिंग ऐरे जेनरेट करें ।
  • उसे arr में जोड़ें || . के साथ
  • उपरोक्त की तरह array_agg_mult() . के साथ एकत्र करें ।

SQL Fiddle. प्रदर्शन सभी .
एसक्यूएल फिडल में आउटपुट भ्रामक है, इसलिए मैंने वहां टेक्स्ट के लिए परिणाम डाला।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. WAMP पर पोस्टग्रेएसक्यूएल का एकीकरण

  2. पोस्टग्रेज में अधिकतम कनेक्शन कैसे बढ़ाएं?

  3. मैं जेटीए लेनदेन की घटनाओं को कैसे रोक सकता हूं और लेनदेन से जुड़े वर्तमान EntityManager का संदर्भ प्राप्त कर सकता हूं

  4. बैकएंड डेटाबेस एसिंक्रोनस रूप से बदलते समय जेपीए इकाइयों को रीफ्रेश कैसे करें?

  5. PostgreSQL में डेटा आयात करने के बाद, डुप्लिकेट कुंजी मान अद्वितीय बाधा का उल्लंघन करता है