显示PostgreSQL中不同列的jsonb数据



我有一个名为stores的表,其中包含名为id的列和名为result的列。结果列保存一个jsonb它看起来像这样:示例

我想显示productnamedateOfSale在两列中。我正在使用下面的代码,但是数据显示在单列中。
SELECT b.field_value AS productName, count(*) FROM
( SELECT * FROM (SELECT (jsonb_array_elements(result)::jsonb)->>'name' field_name, 
(jsonb_array_elements(result)::jsonb)->>'value' field_value, 
FROM stores WHERE store_id = '1') a
WHERE a.field_name='$.productname OR a.field_name='$dateofSale') b GROUP BY b.field_value

I am new to PostgreSQL.

预期的结果:

tbody> <<tr>
productnamedateofsale
戴尔监控2021
戴尔监控2020
罗技鼠标2019

试试这个,应该可以:

SELECT store_id
, jsonb_path_query_first(s.result, '$[*] ? (@.name == "$.productname").value') AS productname
, jsonb_path_query_first(s.result, '$[*] ? (@.name == "$.dateofSale").value') AS dateofsale
FROM stores AS s
WHERE store_id = '1'

但是json数据样本的结构有点奇怪。使用以下简单的json结构代替:

'{"$.productname": "DELL MONITOR", "$.dateofSale": "2021"}'
'{"$.productname": "DELL MONITOR", "$.dateofSale": "2020"}'
'{"$.productname": "LOGITEC MOUSE", "$.dateofSale": "2019"}'

选择语句应该是:

SELECT store_id, s.result->'$.productname' AS productname, s.result->'$.dateofSale AS dateofsale
FROM stores AS s
WHERE store_id = '1'