【发布时间】:2020-08-07 16:00:35
【问题描述】:
我在 PostgreSQL 10.9 数据库的表中有一个 json 数据类型的 json_metrics 列。列中的数据是一个对象数组,每个对象都有一个会话、入口、月份和年份属性。每个月/年组合最多有一个对象。所以它看起来像这样,例如:
[
{"sessions":52,"entrances":55,"month":3,"year":2020},
{"sessions":59,"entrances":59,"month":4,"year":2020},
{"sessions":76,"entrances":76,"month":5,"year":2020}
]
我希望能够对存储在此 json_metrics 列中的给定“月”和“年”组合的“会话”或“入口”上的行进行排序。例如。按 3/2020 会话降序对行进行排序。如果有一个关于 sessions-2020-03 的专栏,我当然会只使用“order by sessions-2020-03 desc”来做到这一点。
我试图用 json 列做的事情可能吗?我愿意更改 json 的结构,或者将数据类型更改为 jsonb(如果有任何值)。
【问题讨论】:
-
有可能。如果您使用的是 PG12,那么您可以使用 SQL jsonpath 为您提取正确的对象,然后直接取消引用
sessions键。如果您在较早的 PG 上,则需要在横向连接中使用json_array_elements()将此数组转换为行并使用where子句对其进行过滤,然后使用order by。我想帮忙举个例子,但我需要用完一天。 -
感谢您的建议@MikeOrganek。我应该包括我使用的是 10.9 版本,所以听起来这可能会变得混乱。 :) 我将不得不尝试沿着这条路走下去,看看它是如何进行的,也许比较是否有更好的方法来组织 json,或者如果获取所有行然后在代码中排序会更好。
-
一点也不差。 jsonpath 会更容易,但取消嵌套只是一个额外的步骤。
标签: json postgresql