【问题标题】:Array_agg functionArray_agg 函数
【发布时间】:2020-08-25 09:46:01
【问题描述】:

我有多个列要聚合到一个新列中。我想将它们连接到一个数组中,并在它们之间用“,”分隔符。你能告诉我一些编写查询的进步吗。我的例子我希望工作简单快捷:

  SELECT array_agg('[' || us.name || ',' || us.age || ',' || us.gender || ']') 
  FROM users as us;

【问题讨论】:

  • 请仅使用问题的相关标签进行标记。由于没有 JavaScript 代码和 PHP 代码,所以我删除了这两个标签。
  • 您是否尝试创建 JSON 数组值?为什么[ 字符?当您返回一个数组时,您不需要额外的字符来分隔数组的元素
  • @a_horse_with_no_name 是的,先生,但是像 array_to_string 函数,上面有参数分隔符?
  • @Steven 那是不正确的。建议编辑权限对所有人开放,您甚至不需要帐户 - 匿名用户可以建议编辑。我相信问题作者也可以随时编辑他们自己的问题 - 类似于他们可以发表评论的方式。用户对自己的帖子拥有更多权限。

标签: sql postgresql array-agg


【解决方案1】:

如果要创建 JSON 数组,请使用 JSON 函数:

select jsonb_agg(concat_ws(',', us.name, us.age, us.gender))
from users as us;

如果您想要真正的 JSON 对象(使用键/值对)而不是数组中的逗号分隔字符串:

select jsonb_agg(to_jsonb(u))
from (
  select name, age, gender
  from users
) u

另一种选择是创建嵌套数组:

select jsonb_agg(to_jsonb(array[name, age, gender]))
from users

【讨论】:

  • 感谢您的提前。我忘了尝试使用 jsonB_agg 我在使用 json_agg 时丢失了 1 小时。第一个错误消散器,我对你曾经的某些案例感到非常兴奋@a_horse_with_no_name
  • 我有一个美好的一天。非常感谢兄弟!!!我使用了第一个解决方案。在一个 json 数组中有很多项目。
  • @ittos2 如果该答案解决了您的问题,那么请accept 它,以便您的问题被标记为已解决。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-03
  • 1970-01-01
  • 1970-01-01
  • 2021-08-18
  • 1970-01-01
相关资源
最近更新 更多