获取了故意未规范化的数据表:
SELECT location, day, title, teacher, "startTime", "endTime", canceled from "Schedules" ORDER by location, day, "startTime";
数据...
"First", 1, "Knitting 101", "Doe, John", "2019-02-19T09:00Z", "2019-02-19T11:00Z"
"First", 2, "Model Building 201", "Doe, Jane", "2019-02-20T09:00Z", "2019-02-20T11:00Z"
"Second", 1, "Rocks for Jocks 101", "Smith, Terry", "2019-02-19T09:00Z", "2019-02-19T11:00Z"
"Second", 2, "Speed Reading 101", "Case, Justin", "2019-02-20T09:00Z", "2019-02-20T11:00Z"
并希望生成此JSON:
[
{
"location": "First",
"days": [
{
"day": 1,
"classes": [
{
"title": "Knitting 101",
"teacher": "Doe, John",
"starts": "2019-02-19T09:00Z"
"ends": "2019-02-19T11:00Z",
"canceled": false
}
... other classes
]
}
... other days
]
}
... other locations
]
当前正在使用JavaScript函数获取查询结果并将其嵌套。尝试使用此方法使用JSON函数失败:
这是正确的方法还是我错过了一个更优雅的解决方案?
更新:@FXD提供的解决方案是从最详细的组织级别开始,向后工作。下面是工作查询(引用混合大小写对象的小调整:
SELECT array_to_json(array_agg("LocationClasses" ORDER BY Location)) AS "FullSchedule"
FROM (
SELECT location, json_build_object('location', location, 'days', array_to_json(array_agg("LocationDayClasses" ORDER BY day))) AS "LocationClasses"
FROM (
SELECT location, day, json_build_object('day', day, 'classes', array_to_json(array_agg(json_build_object('title', title, 'teacher', teacher,'starts', "startTime", 'ends', "endTime", 'cancelled', canceled) ORDER BY "startTime"))) as "LocationDayClasses"
FROM "Schedules"
GROUP BY location, day
) T1
GROUP BY location
) T2
你的步骤是对的,但我的顺序相反
如果您构建类,将它们按位置/天分组,然后按位置分组所有天,最后将整个内容分组到一个记录中,则可以在一个查询中完成所有操作。
从下面的查询中,我建议您尝试查看T1
子查询的功能,然后对T2
子查询执行相同的操作。你会发现这并不复杂。
SELECT array_to_json(array_agg(LocationClasses ORDER BY Location)) AS FullSchedule
FROM (
SELECT Location, json_build_object('location',Location, 'days', array_to_json(array_agg(LocationDayClasses ORDER BY day))) AS LocationClasses
FROM (
SELECT Location, day, json_build_object('day', Day, 'classes', array_to_json(array_agg(json_build_object('title',Title,'teacher',Teacher,'starts',Starts,'ends',Ends,'cancelled',false) ORDER BY starts))) as LocationDayClasses
FROM Schedules
GROUP BY Location, Day
) T1
GROUP BY Location
) T2
问题内容: 在PostgreSQL 9.3.4上,我有一个称为“ person”的JSON类型列,并且其中存储的数据为format 。我想检索索引为0的狗的品种。这是我运行的两个查询: 不起作用 作品 为什么必须进行类型转换?效率低下吗?我是在做错什么,还是对Postgres JSON支持有必要? 问题答案: 这是因为运算符将JSON数组元素获取为文本。您需要强制转换以将其结果转换回JSON。 您
在PostgreSQL 9.3.4中,我有一个名为“person”的JSON类型列,其中存储的数据格式为
我试图写一个规范来使用jolt转换完成下面的转换。我需要将平面JSON转换成嵌套JSON。 输入数据与此问题几乎相同。 Link:将平面json转换为具有多个数组的嵌套Json,并使用Jolt transform在输出中保留空值 我在将平面 JSON 转换为嵌套 JSON 时遇到了一些问题。在这里,我想基于 stoptype 属性聚合数据。我使用 https://jolt-demo.appspot
所以目前我看到的是这样的: 这是我目前编写的Jolt规范(编辑): 以及转换后的输出: 任何帮助都是非常感谢的。
问题内容: 我正在开发一个使用Postgres 数据类型的Rails应用程序。我在名为的表中有一个JSON列。假设我有多个这样的条目: 我想做的是返回具有相同唱片集,src和背景的条目的不同组合(注意:在节点内,数组元素的顺序无关紧要)。例如,查询应将条目1,3作为一组进行匹配,将条目2与另一组进行匹配,依此类推。目标是找到前3个最常见的组合。我知道如何使用Ruby来执行此操作,但是我必须查询大量
我的数据库中有一个名为“json”的表,有两列:“id”和“data” 目前只有一行存储在其中,id为1,数据为JSON结构: 我需要更新json的一个键:“Name here”必须变成“updated” 这就是我尝试的: 但我有一个错误: “更新”处或附近的语法错误