Ekstrak lajur tertentu daripada jadual PostgreSQL sebagai tatasusunan objek JSON
Soalan:
Anda mempunyai jadual dengan berbilang lajur dan ingin mengembalikan tatasusunan objek untuk setiap baris, dengan dua lajur dikumpulkan mengikut lajur lain. Walau bagaimanapun, anda akan menghadapi masalah bahawa hasilnya mengandungi kunci tambahan dalam setiap objek. Output yang dikehendaki ialah tatasusunan objek dengan hanya dua lajur, dikumpulkan mengikut lajur ketiga.
Penyelesaian PostgreSQL 10:
Untuk PostgreSQL 10 dan ke atas, anda boleh menggunakan operator -
untuk mengalih keluar satu kunci (atau tatasusunan kunci dalam PostgreSQL 10) daripada objek jsonb
sebelum mengagregatkan.
<code class="language-sql">SELECT val2, jsonb_agg(to_jsonb(t.*) - '{id, val2}'::text[]) AS js_34 FROM tbl t GROUP BY val2;</code>
Penyelesaian PostgreSQL 9.4:
Dalam PostgreSQL 9.4 dan ke atas, anda boleh menggunakan jsonb_build_object()
atau json_build_object()
untuk mencipta objek JSON daripada kunci dan nilai berselang-seli.
<code class="language-sql">SELECT val2, jsonb_agg(jsonb_build_object('val3', val3, 'val4', val4)) AS js_34 FROM tbl GROUP BY val2;</code>
Penyelesaian PostgreSQL 9.3:
Untuk PostgreSQL 9.3 dan ke atas, anda boleh menggunakan to_jsonb()
dan ungkapan ROW untuk mencipta objek JSON. Anda juga boleh menggunakan subquery dan bukannya ungkapan ROW.
<code class="language-sql">SELECT val2, jsonb_agg(to_jsonb((val3, val4))) AS js_34 FROM tbl GROUP BY val2; SELECT val2, jsonb_agg(to_jsonb((SELECT t FROM (SELECT val3, val4) t))) AS js_34 FROM tbl GROUP BY val2;</code>
Penyelesaian di atas akan mengembalikan hasil yang diingini: tatasusunan objek dengan hanya dua lajur, dikumpulkan mengikut lajur ketiga.
Atas ialah kandungan terperinci Bagaimana untuk Mengekstrak Lajur Khusus sebagai JSON Array Objek dalam PostgreSQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!