Salt la conținutul principal
Modulul 15 · Lecția 2 din 257/57 în curs~15 min
Lecții din modul (2/2)

Funcții de agregare JSON

Funcții de agregare JSON

Integrarea este bidirecțională. Baza de date nu trebuie să se limiteze la analizarea JSON: o poate construi. Imaginează-ți dacă API-ul tău și Node.js nu ar fi trebuit să facă munca murdară și intensă de a serializa obiectele imbricate în JSON, deoarece DB le-a livrat deja construite direct de pe disc.

Construirea de obiecte și tablouri

În loc de agregarea în masă clasică sau concatenarea șirurilor (String_agg), ne întoarcem la aceste funcții:

  • json_build_object(key, value, ...) sau jsonb_build_object(...)
  • json_agg(...) sau jsonb_agg(...)
SQL
SELECT json_build_object('name', first_name, 'city', city) AS data
FROM customers;

Veți vedea rânduri tipărite care conțin { "name": "...", "city": "..." }, perfect conforme.

Exercițiu#sql.m15.l2.e1
Încercări: 0Se încarcă…

Din tabelul „clienți”, returnați datele ca rânduri JSON, mapate cu \`json_build_object\`. Hartați două chei: „nume” legat de „first_name” și „e-mail” legat de „e-mail”. Folosiți \`AS customer_doc\` pentru coloană.

Se încarcă editorul...
Afișează indiciu

json_build_object('nume', prenume, 'e-mail', e-mail)

Soluție disponibilă după 3 încercări

Exercițiu#sql.m15.l2.e2
Încercări: 0Se încarcă…

Pentru fiecare comandă (\`order_id\`), construiți într-o singură unitate toate \`product_id\`-urile pe care le include. Din tabelul „articole_comandă”, rulați \`GROUP BY order_id\`. Apoi selectați \`order_id\` și acumulați într-o matrice JSON (JSON_AGG) doar datele \`product_id\`. Denumiți matricei \`produs\`.

Se încarcă editorul...
Afișează indiciu

JSON_AGG(product_id) plus un grup clasic de pentru a aduna datele.

Soluție disponibilă după 3 încercări