sql - 如何在包含 json 数据的 postgresql 列中找到最小值?

标签 sql postgresql jsonb

我在 postgres 数据库中有一个表 t。它有一个 data 列,其中包含以下格式的 jsonb 数据(对于每条记录)-

{
  "20161214": {"4": ["3-14", "5-16", "642"], "9": ["3-10", "5-10", "664"] },
  "20161217": {"3": ["3-14", "5-16", "643"], "7": ["3-10", "5-10", "661"] } 
}

其中20161214是日期,"4"是月份,642是金额。

我需要找到表中每条记录的最小金额以及该金额所属的月份。

我尝试过的:

使用 jsonb_each 函数分离键值对,然后使用 min 函数。但我仍然无法获取它所属的月份。

如何实现?

最佳答案

select  j2.date
       ,j2.month
       ,j2.amount

from    t 

        left join lateral  

           (select      j1.date
                       ,j2.month
                       ,(j2.value->>2)::numeric  as amount

            from        jsonb_each (t.data) j1 (date,value) 

                        left join lateral jsonb_each (j1.value) j2 (month,value)
                        on true

            order by    amount

            limit       1   
            ) j2

        on true

+----------+-------+--------+
| date     | month | amount |
+----------+-------+--------+
| 20161214 | 4     | 642    |
+----------+-------+--------+

关于sql - 如何在包含 json 数据的 postgresql 列中找到最小值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41236191/

相关文章:

sql - 内部联接与自然联接与 USING 子句 : are there any advantages?

mysql - 按未包含在结果集中的列进行排序是否有意义?

postgresql - 无法从客户端连接到 PostgreSQL - 错误超时

postgresql - 从 jsonb 数组包含具有特定属性的元素的表中选择

postgresql - 在 View 上使用 'instead of' 触发器为 jsonb 数组中的每个元素插入

arrays - 在 PostgreSQL 9.2、9.3 和 9.4 中追加(推送)和删除 JSON 数组?

mysql - 使用 where 子句创建唯一索引

sql - 向 Json 数组添加新元素

sql - 调用返回记录的 Postgres 函数,传入查询结果

postgresql - 无法启动用 docker-compose 编写的 kong 服务