[英]How to query JSON column for unique object values in PostgreSQL
I'm looking to query a table for a distinct list of values in a given JSON column.我正在寻找在给定 JSON 列中查询不同值列表的表。
In the code snippet below, the Survey_Results table has 3 columns: Name, Email, and Payload.在下面的代码片段中,Survey_Results 表有 3 列:名称、电子邮件和有效负载。 Payload is the JSON object to I want to query. 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"}
]
I am looking for a unique list of all fieldNames mentioned.我正在寻找提到的所有 fieldNames 的唯一列表。
The ideal answer would be query giving me a list containing "Product Name", "Product Price", "Food Name", "Food Taste", "Band Name", and "Valid Member".理想的答案是查询给我一个包含“产品名称”、“产品价格”、“食物名称”、“食物味道”、“乐队名称”和“有效会员”的列表。
Is something like this possible in Postgres?在 Postgres 中可能有这样的事情吗?
Use jsonb_array_elements()
in a lateral join:在横向连接中使用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)
How to find distinct Food Name values?如何找到不同的食品名称值?
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)
Important.重要的。 Note that the json structure is illogical and thus unnecessarily large and complex.请注意,json 结构是不合逻辑的,因此不必要地庞大和复杂。 Instead of代替
[
{"fieldName":"Product Name", "Value":"Calculator"},
{"fieldName":"Product Price", "Value":"$54.99"}
]
use用
{"Product Name": "Calculator", "Product Price": "$54.99"}
Open this db<>fiddle to see that proper json structure implies simpler and faster queries.打开这个db<>fiddle可以看到正确的 json 结构意味着更简单和更快的查询。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.