從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中文網其他相關文章!