sql >> Database >  >> RDS >> PostgreSQL

begrijp json_agg niet in deze context

Ik geloof dat de LATERAL JOIN doet de truc daar. In uw oorspronkelijke zoekopdracht gebruikt u json_agg tegen de hele tabelgegevensset (gefilterd op '{"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"}';

Ondertussen speel je in tweede instantie met één rij tegelijk en gebruik je de LATERAL . Daarom heb je uiteindelijk 3 rijen met één "kind":"person" waarden in plaats van een unieke rij met 3 waarden.

Ik weet niet zeker wat je probeert te bereiken, maar het volgende kan je in de goede richting zetten

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"}]';

Resultaten

                                            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. mysqli_stmt_get_result alternatief voor php 5.2.6

  2. Hoe kan ik een database neerzetten of maken van clojure.java.jdbc?

  3. Hoe gebruik de ingevoegde \ verwijderde tabel in de opgeslagen procedure?

  4. hoe een lijst met 10.000 unieke id's van dual te selecteren in Oracle SQL?