sql >> Databáze >  >> RDS >> PostgreSQL

Odeberte pár klíčových hodnot z vnořeného pole jsonb v postgresql

ukázka krok za krokem:db<>fiddle

SELECT
    jsonb_object_agg(key, a)                                -- 5
FROM (
    SELECT
        mydata,
        key,
        jsonb_agg(a_elems.value - 'c') as a                   -- 3/4
    FROM
        mytable,
        jsonb_each(mydata) elems,                             -- 1
        jsonb_array_elements(elems.value) AS a_elems          -- 2
    GROUP BY mydata, key                                      -- 4
) s
GROUP BY mydata                                               -- 5
  1. Rozbalte prvky JSON každý do jednoho řádku. Tím se vygenerují dva sloupce:jeden pro klíč a jeden pro hodnotu (pole JSON)
  2. Rozbalte pole JSON do jednoho řádku (který odděluje agregovaný objekt JSON, ze kterého chcete odstranit c prvek)
  3. Můžete použít - operátor k odstranění prvku.
  4. Chcete-li znovu agregovat původní objekt JSON, musíte jej seskupit zpětně. jsonb_agg() znovu agreguje pole
  5. Nakonec musíte znovu sestavit původní objekt JSON pomocí jsonb_object_agg() pomocí dříve vygenerovaného klíčového sloupce a nového sloupce pole.



  1. Volání nedefinované metody Illuminate\\Database\\Schema\\Blueprint::increments()

  2. Kurzorová smyčka MYSQL, spustí jedno kolo navíc, proč?

  3. Počítání a seskupování stejného pojmenovaného sloupce v různých tabulkách (kde klauzule pouze z jedné tabulky)

  4. Časový limit při získávání připojení po upgradu Knex