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

सरणी प्रकार के लिए array_agg

आप अपनी विशिष्ट सरणियों को संभालने के लिए कस्टम समुच्चय लिख सकते हैं, जैसे:

DROP TABLE IF EXISTS e;
CREATE TABLE e
(
    id serial PRIMARY KEY,
    alert_type text,
    date_happened timestamp with time zone
);

INSERT INTO e(alert_type, date_happened) VALUES
    ('red', '2011-05-10 10:15:06'),
    ('yellow', '2011-06-22 20:01:19');

CREATE OR REPLACE FUNCTION array_agg_custom_cut(anyarray)
RETURNS anyarray
    AS 'SELECT $1[2:array_length($1, 1)]'
LANGUAGE SQL IMMUTABLE;

DROP AGGREGATE IF EXISTS array_agg_custom(anyarray);
CREATE AGGREGATE array_agg_custom(anyarray)
(
    SFUNC = array_cat,
    STYPE = anyarray,
    FINALFUNC = array_agg_custom_cut,
    INITCOND = $${{'', '', ''}}$$
);

प्रश्न:

SELECT
    array_agg_custom(
        ARRAY[
            alert_type::text,
            id::text,
            CAST(extract(epoch FROM date_happened) AS text)
        ])
FROM e;

परिणाम:

              array_agg_custom              
--------------------------------------------
 {{red,1,1305036906},{yellow,2,1308787279}}
(1 row)

संपादित करें:

यहाँ दूसरा, छोटा तरीका है (अर्थात, आपको array_agg_custom_cut की आवश्यकता नहीं है फ़ंक्शन, लेकिन जैसा कि आप अतिरिक्त ARRAY see देखते हैं क्वेरी में स्तर आवश्यक है):

CREATE AGGREGATE array_agg_custom(anyarray)
(
    SFUNC = array_cat,
    STYPE = anyarray
);

SELECT
    array_agg_custom(
        ARRAY[
            ARRAY[
                alert_type::text,
                id::text,
                CAST(extract(epoch FROM date_happened) AS text)
            ]
        ])
FROM e;

परिणाम:

              array_agg_custom              
--------------------------------------------
 {{red,1,1305036906},{yellow,2,1308787279}}
(1 row)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एक स्ट्रिंग की जांच करने के लिए पोस्टग्रेज क्वेरी एक संख्या है

  2. मैं कैसे PostgreSQL में छँटाई के साथ पंक्तियों की एक निश्चित संख्या को हटा सकता हूँ?

  3. पोस्टग्रेज़ डेटाबेस क्यों नहीं बनाता है?

  4. स्क्रिप्ट के काम करने पर अब पोस्टग्रेज () टाइमस्टैम्प नहीं बदलता है

  5. पोस्टग्रेसक्यूएल से साधारण फजी खोज कैसे बनाएं?