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

सरणियों की एकाधिक पंक्तियों को संक्षिप्त करें यदि सरणियाँ ओवरलैप होती हैं

ठीक है, यह कठिन था। कृपया इस प्रश्न पर एक नज़र डालें:

;with recursive minelem AS(
select arr, MIN(unnest) minel from (select arr, unnest(arr) from test) a group by arr),
testwithrn as(
select arr, row_number() over (order by minel) rn from minelem
),
cte(arr, rn, counter, grp) as(
  select arr, rn, 1, 1 from testwithrn where rn = 1
union all 
  select 
    case when array_length(a.arr & b.arr, 1) > 0 then a.arr | b.arr else b.arr end, 
    b.rn, 
    case when array_length(a.arr & b.arr, 1) > 0 then a.counter + 1 else 1 end,
    case when array_length(a.arr & b.arr, 1) > 0 then a.grp else a.grp + 1 end
    from cte a inner join testwithrn b 
    on b.rn > a.rn
),
grouped as(
  SELECT arr, counter, grp,
  row_number() over (partition by grp order by counter desc) rn from cte)
select distinct arr from grouped where rn = 1

SQL Fiddle

मैं समाधान के साथ कैसे आया, यह समझने के लिए आप ऊपर दिए गए प्रश्न में विभिन्न सीटीई का परीक्षण कर सकते हैं। यहां कुंजी ऑपरेटर का उपयोग करना है | सरणियों को मर्ज करने के लिए, जैसा कि a.arr | b.arr

cte . नामक एक पुनरावर्ती क्वेरी है जो सेट के विभिन्न समूहों के भीतर प्रत्येक सेट की घटना की गणना करता है। आप अंतिम पंक्ति को select * from cte order by grp, counter . से बदल सकते हैं यह देखने के लिए कि कैसे counter और grp जब सेट पुनरावर्ती रूप से बनाए जाते हैं तो बदल जाते हैं




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL last_value नल पर ध्यान न दें

  2. psql:FATAL:भूमिका पोस्टग्रेज मौजूद नहीं है

  3. पीएसक्यूएल में दिए गए स्ट्रिंग के अंत तक किसी चरित्र के चौथे अवसर से सबस्ट्रिंग कैसे प्राप्त करें?

  4. वस्तुओं के jsonb सरणी में नेस्टेड प्रमुख मानों के लिए रेंज टेस्ट को गति दें

  5. PostgreSQL स्थापना के बाइनरी प्रारूप पर pg_repack एक्सटेंशन संकलित करना