arrays - 如何根据 jsonb 列值对数据进行排序
问题描述
我有一个包含 4 列的表,其中一列(id)的数据类型为 jsonb。我需要在此列中对值进行排序。样本数据:
name age zip id
----------------------------------------------------------------
abc 25 11111 ["2722", "2855", "3583", "2722", "2855"]
SELECT (t2.id ->> 'x')::numeric
FROM table t2
我试图获取排序后的值,然后在内部查询中使用它,但上面的查询返回 null。
我希望结果显示为:
name age zip id
----------------------------------------------------------------
abc 25 11111 ["2722", "2722", "2855", "2855","3583"]
解决方案
正如@a_horse_with_no_name 所说,您必须拆分数组,然后将其重新组合在一起:
SELECT name,
age,
zip,
jsonb_agg(ids ORDER BY ids)
FROM (
SELECT name,
age,
zip,
jsonb_array_elements(id) as ids
FROM test) AS sub
GROUP BY name, age, zip;
name | age | zip | jsonb_agg
------+-----+-------+------------------------------------------
abc | 25 | 11111 | ["2722", "2722", "2855", "2855", "3583"]
推荐阅读
- reactjs - REACT 客户光标类不会按预期移动
- javascript - 为什么工具提示被渲染两次?
- java - 如何使用 MaterialCardView 制作第二个颜色边框?
- c# - 为什么 BackgroundWorker 的 Progress 事件运行在不同的线程上?
- c# - 无法在 Raspberry Pi 上运行 .NET 5 Windows 窗体 - 找不到框架
- javascript - 为了启动全局执行上下文,在 ecma262 中发生的第一个抽象操作是什么?
- next.js - 更改下一个服务端口时不显示 Favicon
- google-chrome-devtools - 为什么 Fetch API 在我的机器上不起作用?
- amazon-web-services - AWS CloudFormation 无法使用 CodeDeploy 蓝/绿部署创建堆栈
- python - PIL python像形状一样绘制文本列