簡體   English   中英

Postgresql 將多個值提取到不同的列中

[英]Postgresql extract multiple values into different columns

我需要你的幫助進行調查。 原始表采用以下格式:

在此處輸入圖片說明

我需要將信息轉換為列,但是在某些情況下,一個答案可能有多個值。

所需的輸出如下:

在此處輸入圖片說明

我設法使用以下代碼將答案連接到一個列表中:

'{' || ARRAY_TO_STRING(ARRAY_AGG('"' || Question || '":' || Answer),',') || '}' AS key_value

然后使用此列,我可以使用以下方法提取它:

CAST(COALESCE(key_value::JSON ->> 'consumption_soda','0') AS INTEGER) AS soda_consumption,
CAST(COALESCE(key_value::JSON ->> 'consumption_water','0') AS INTEGER) AS water_consumption

但是,當我想提取 soda_painpoints 時,它只會返回第一個值。 你能幫我找到我的問題的答案嗎?

首先,要將答案連接到 jsonb 對象中,您應該使用jsonb_object_agg(Question, Answer) AS key_value而不是'{' || ARRAY_TO_STRING(ARRAY_AGG('"' || Question || '":' || Answer),',') || '}' AS key_value '{' || ARRAY_TO_STRING(ARRAY_AGG('"' || Question || '":' || Answer),',') || '}' AS key_value '{' || ARRAY_TO_STRING(ARRAY_AGG('"' || Question || '":' || Answer),',') || '}' AS key_value

那么soda_painpoints問題的答案 '1 5 8 7' 似乎是一個字符串,它連接了由空格字符分隔的整數 (1, 5, 8, 7) 列表。 在這種情況下,您可以將 Answer 存儲為簡單的 jsonb 數值或 jsonb 數組,具體取決於 Answer 值的類型:

SELECT jsonb_object_agg( Question
                       , CASE 
                           WHEN jsonb_typeof(to_jsonb(Answer)) = 'number'
                           THEN Answer :: integer
                           ELSE regexp_split_to_array(Answer, '\s+') :: integer[]
                         END
                       ) AS key_value

這樣做,與鍵soda_painpoints關聯的值將是一個 jsonb 整數數組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM