![](/img/trans.png)
[英]How sum query json array object base on other column on postgresql
[英]How to query JSON column for unique object values in PostgreSQL
我正在尋找在給定 JSON 列中查詢不同值列表的表。
在下面的代碼片段中,Survey_Results 表有 3 列:名稱、電子郵件和有效負載。 Payload 是我要查詢的 JSON 對象。
Table Name: Survey_Results
Name Email Payload
Ying SmartStuff@gmail.com [
{"fieldName":"Product Name", "Value":"Calculator"},
{"fieldName":"Product Price", "Value":"$54.99"}
]
Kendrick MrTexas@gmail.com [
{"fieldName":"Food Name", "Value":"Texas Toast"},
{"fieldName":"Food Taste", "Value":"Delicious"}
]
Andy WhereTheBass@gmail.com [
{"fieldName":"Band Name", "Value":"MetalHeads"}
{"fieldName":"Valid Member", "Value":"TRUE"}
]
我正在尋找提到的所有 fieldNames 的唯一列表。
理想的答案是查詢給我一個包含“產品名稱”、“產品價格”、“食物名稱”、“食物味道”、“樂隊名稱”和“有效會員”的列表。
在 Postgres 中可能有這樣的事情嗎?
在橫向連接中使用jsonb_array_elements()
:
select distinct value->>'fieldName' as field_name
from survey_results
cross join json_array_elements(payload)
field_name
---------------
Product Name
Valid Member
Food Taste
Product Price
Food Name
Band Name
(6 rows)
如何找到不同的食品名稱值?
select distinct value->>'Value' as food_name
from survey_results
cross join json_array_elements(payload)
where value->>'fieldName' = 'Food Name'
food_name
-------------
Texas Toast
(1 row)
重要的。 請注意,json 結構是不合邏輯的,因此不必要地龐大和復雜。 代替
[
{"fieldName":"Product Name", "Value":"Calculator"},
{"fieldName":"Product Price", "Value":"$54.99"}
]
用
{"Product Name": "Calculator", "Product Price": "$54.99"}
打開這個db<>fiddle可以看到正確的 json 結構意味着更簡單和更快的查詢。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.