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

इस संदर्भ में json_agg समझ में नहीं आता

मेरा मानना ​​है कि LATERAL JOIN वहाँ चाल चल रहा है। अपनी मूल क्वेरी में, आप json_agg . का उपयोग कर रहे हैं संपूर्ण तालिका डेटासेट के विरुद्ध ('{"kind":"person"}' . द्वारा फ़िल्टर किया गया )

with a  as 
    (
        select jsonb_array_elements(s.payload) j 
        from segments s
    )
SELECT  json_agg(a.j) AS filtered_payload 
from a
where j @> '{"kind":"person"}';

इस बीच दूसरे उदाहरण में, आप LATERAL . का उपयोग करके एक समय में एक पंक्ति के साथ खेल रहे हैं . यही कारण है कि आपके पास एकल "kind":"person" . के साथ 3 पंक्तियाँ हैं 3 मानों वाली एक अद्वितीय पंक्ति के बजाय मान।

आप जो हासिल करने की कोशिश कर रहे हैं, उसके बारे में निश्चित नहीं है, लेकिन निम्नलिखित आपको सही दिशा में ले जा सकते हैं

SELECT a.filtered_payload,
    a.ct_elem_row, 
    sum(ct_elem_row) OVER () AS ct_elem_total, 
    count(*)         OVER () AS ct_rows
FROM segments s
 JOIN LATERAL (
    SELECT json_agg(j.elem) AS filtered_payload, 
        count(*) AS ct_elem_row
    FROM   segments d, lateral jsonb_array_elements(d.payload) j(elem)
    WHERE  j.elem @> '{"kind":"person"}'
    ) a ON ct_elem_row > 0
WHERE  s.payload @> '[{"kind":"person"}]';

परिणाम

                                            filtered_payload                                            | ct_elem_row | ct_elem_total | ct_rows
--------------------------------------------------------------------------------------------------------+-------------+---------------+---------
 [{"kind": "person", "limit": "1"}, {"kind": "person", "limit": "3"}, {"kind": "person", "limit": "2"}] |           3 |             9 |       3
 [{"kind": "person", "limit": "1"}, {"kind": "person", "limit": "3"}, {"kind": "person", "limit": "2"}] |           3 |             9 |       3
 [{"kind": "person", "limit": "1"}, {"kind": "person", "limit": "3"}, {"kind": "person", "limit": "2"}] |           3 |             9 |       3
(3 rows)



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

  2. कैसे SQLAlchemy में अजगर में dataframe.to_sql रोलबैक करने के लिए?

  3. PostgreSQL के साथ रॉडबैक कैरेक्टर एन्कोडिंग त्रुटि

  4. PostgreSQL में क्वेरी को ऑप्टिमाइज़ करें

  5. सरणी का उपयोग करके प्रारूप स्ट्रिंग को पोस्टग्रेज करें