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

पोस्टग्रेज array_agg ERROR:विभिन्न आयामीता के सरणियों को जमा नहीं कर सकता

उदाहरण डेटा:

create table my_table(name text, numbers text[], letters text[]);
insert into my_table values
    ('first',  '{1, 2}', '{a}'   ),
    ('first',  '{2, 3}', '{a, b}'),
    ('second', '{4}',    '{c, d}'),
    ('second', '{5, 6}', '{c}'   );

आपको सरणियों के तत्वों को एकत्रित करना चाहिए, सरणियों को नहीं। unnest() का उपयोग करें :

select 
    name, 
    array_agg(distinct number) as numbers, 
    array_agg(distinct letter) as letters
from 
    my_table, 
    unnest(numbers) as number, 
    unnest(letters) as letter
group by name;

  name  | numbers | letters 
--------+---------+---------
 first  | {1,2,3} | {a,b}
 second | {4,5,6} | {c,d}
(2 rows)    

वैकल्पिक रूप से, आप एक कस्टम समुच्चय बना सकते हैं। आपको सरणियों को मर्ज करने के लिए एक फ़ंक्शन की आवश्यकता है (डुप्लिकेट हटाने के साथ संयोजन):

create or replace function public.array_merge(arr1 anyarray, arr2 anyarray)
    returns anyarray language sql immutable
as $$
    select array_agg(distinct elem order by elem)
    from (
        select unnest(arr1) elem 
        union
        select unnest(arr2)
    ) s
$$;

create aggregate array_merge_agg(anyarray) (
    sfunc = array_merge,
    stype = anyarray
);

select 
    name, 
    array_merge_agg(numbers) as numbers, 
    array_merge_agg(letters) as letters
from my_table
group by name;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. सर्वलेट .jar निर्भरता नल सूचक

  2. PostgreSQL पुनरावर्ती CTE से फ़ंक्शन पर डेटा पास करता है

  3. @BatchSize एक स्मार्ट या बेवकूफी भरा उपयोग?

  4. फ़ंक्शन UNIX_TIMESTAMP मौजूद नहीं है

  5. तालिका नाम का उचित सम्मिलन