首頁 >資料庫 >mysql教程 >如何在 PostgreSQL 中提取特定列作為 JSON 物件數組?

如何在 PostgreSQL 中提取特定列作為 JSON 物件數組?

Linda Hamilton
Linda Hamilton原創
2025-01-14 21:57:43865瀏覽

How to Extract Specific Columns as a JSON Array of Objects in PostgreSQL?

從PostgreSQL表中擷取特定欄位作為JSON物件陣列

問題:

您有一個包含多列的表,希望為每一行傳回一個物件數組,其中兩列根據另一列分組。但是,您會遇到一個問題,即結果在每個物件中包含一個額外的鍵。期望的輸出是一個僅包含兩列的物件數組,並按第三列分組。

PostgreSQL 10 解:

對於PostgreSQL 10以上版本,可以使用-運算子從jsonb物件中刪除單一鍵(或PostgreSQL 10 中的鍵數組),然後再進行聚合。

<code class="language-sql">SELECT val2, jsonb_agg(to_jsonb(t.*) - '{id, val2}'::text[]) AS js_34
FROM   tbl t
GROUP  BY val2;</code>

PostgreSQL 9.4 解:

在PostgreSQL 9.4以上版本中,您可以使用jsonb_build_object()json_build_object()從交替的鍵和值建立JSON物件。

<code class="language-sql">SELECT val2, jsonb_agg(jsonb_build_object('val3', val3, 'val4', val4)) AS js_34
FROM   tbl
GROUP  BY val2;</code>

PostgreSQL 9.3 解:

對於PostgreSQL 9.3以上版本,可以使用to_jsonb()和ROW表達式來建立JSON物件。您也可以使用子查詢來代替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>

以上解決方案將傳回期望的結果:一個僅包含兩列的物件數組,並按第三列分組。

以上是如何在 PostgreSQL 中提取特定列作為 JSON 物件數組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn