[英]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.