我有下表MyTable
:
id │ value_two │ value_three │ value_four
────┼───────────┼─────────────┼────────────
1 │ a │ A │ AA
2 │ a │ A2 │ AA2
3 │ b │ A3 │ AA3
4 │ a │ A4 │ AA4
5 │ b │ A5 │ AA5
我想查询{ value_three, value_four }
按分组的对象数组value_two
。value_two
结果中应单独显示。结果应如下所示:
value_two │ value_four
───────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
a │ [{"value_three":"A","value_four":"AA"}, {"value_three":"A2","value_four":"AA2"}, {"value_three":"A4","value_four":"AA4"}]
b │ [{"value_three":"A3","value_four":"AA3"}, {"value_three":"A5","value_four":"AA5"}]
使用json_agg()
还是都没有关系array_agg()
。
但是,我能做的最好的事情是:
with MyCTE as ( select value_two, value_three, value_four from MyTable )
select value_two, json_agg(row_to_json(MyCTE)) value_four
from MyCTE
group by value_two;
哪个返回:
value_two │ value_four
───────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
a │ [{"value_two":"a","value_three":"A","value_four":"AA"}, {"value_two":"a","value_three":"A2","value_four":"AA2"}, {"value_two":"a","value_three":"A4","value_four":"AA4"}]
b │ [{"value_two":"b","value_three":"A3","value_four":"AA3"}, {"value_two":"b","value_three":"A5","value_four":"AA5"}]
value_two
在对象中添加一个额外的键,我想摆脱它。我应该使用哪个SQL(Postgres)查询?
json_build_object()
](https://www.postgresql.org/docs/current/functions-json.html#FUNCTIONS-JSON-CREATION-TABLE) 在Postgres 9.4或更高版本中
SELECT value_two, json_agg( **json_build_object('value_three', value_three
, 'value_four' , value_four)** ) AS value_four
FROM mytable
GROUP BY value_two;
手册:
row_to_json()
一个
ROW
表达式可以解决问题:
SELECT value_two
, json_agg(row_to_json((value_three, value_four))) AS value_four
FROM mytable
GROUP BY value_two;
但是您会丢失原始的列名。强制转换为已注册的行类型可以避免这种情况。(临时表的行类型也可用于临时查询。)
CREATE TYPE foo AS (value_three text, value_four text); -- once in the same session
SELECT value_two
, json_agg(row_to_json( **(value_three, value_four)::foo** )) AS value_four
FROM mytable
GROUP BY value_two;
或使用子 选择 代替ROW
表达式。更详细,但没有类型强制转换:
SELECT value_two
, json_agg(row_to_json( **(SELECT t FROM (SELECT value_three, value_four) t)** )) AS value_four
FROM mytable
GROUP BY value_two;
Craig相关答案中的更多解释:
在这里
_拨弄
旧的SQL拨弄。
问题内容: 我在Spring Boot中有一个示例RestController: 我正在使用JSON库 当我点击API时,我得到一个异常提示: 路径为[]的Servlet [dispatcherServlet]的Servlet.service()抛出异常[请求处理失败;嵌套异常为java.lang.IllegalArgumentException:未找到类型为org.json.JSONObject
我在Spring Boot中有一个RestController示例: 我正在使用JSON库 当我点击API时,我得到一个异常: 路径为[]的上下文中servlet[dispatcherServlet]的servlet.service()引发异常[请求处理失败;嵌套异常为java.lang.IllegalArgumentException:没有找到具有根本原因的返回值:class org.json.
我有以下练习: 编写一个名为createListOfObjects的函数,该函数接受 包含名字和姓氏以及返回值的字符串数组 一个对象数组,每个对象都具有属性 和以及名字和姓氏值 对应值* var namesList=['Cameron Betts','Shana Lopez','Angela li']* createListOfObjects(名称列表) = 到目前为止,我的解决方案是: 但它返回
问题内容: SQL 2016具有一项新功能,可将SQL Server上的数据转换为JSON。我很难将对象数组组合成值数组,即 示例- 结果- 但我希望结果为- 有人可以帮我吗? 问题答案: 谢谢!我们发现的灵魂是首先转换为XML-
我正在搜索文档中的contacts数组中包含特定_ID的文档。下面是结构: 它执行与$elemmatch查询相同的操作。 我可能错过了一些非常基本的东西,但如果你们能提供一些建议,我将非常感谢。
问题内容: 我看到的每个示例都显示了将简单的值(例如a)插入到数组中。 假设我在SQL Server列中存储了以下JSON: 我该如何追加呢? 当我尝试如下所示使用时,将插入一个: 这是列的结果值: 其他尝试: 我注意到我可以这样创建JSON字符串: 但是,当我尝试在更新语句中使用它时,它不起作用: 我收到以下错误: 消息1086,级别15,状态1,第1行:当FOR XML和FOR JSON子句包