问题标签 [array-agg]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3424 浏览

sql - 将 LIMIT 添加到 ARRAY_TO_JSON 或 ARRAY_AGG

在使用 PostgreSQL 9.6.6 作为后端的 2 人游戏中,我定义了以下自定义存储函数来检索用户的聊天消息:

它连接 words_games 和 words_chat 表并生成以下 JSON 对象(游戏 id “9”作为字符串键),其中包含带有消息的 JSON 数组:

这很好用,但我想增加LIMIT 10数组元素的数量 - 作为防止聊天泛滥的措施。

我已经尝试将它添加到函数中(请参阅上面的注释行),但它没有效果。

你能建议正确的地点LIMIT 10吗?

我通过 WebSockets 将 JSON 对象发送到 Android 应用程序,并希望防止恶意用户通过充斥聊天来破坏此类对象的大小。

更新:

我正在尝试迈克的建议:

但不幸的是得到语法错误:

更新 2:

这是我使用的两张表,抱歉之前没有包含该信息 -

0 投票
0 回答
3016 浏览

django - 如何在 Django ORM 中按查询集分组的 PostgreSQL ArrayAgg 函数?

为了简单起见,我有四个表(A、B、Category 和 Relation),Relation 表存储 B 中 A 的强度,Category 存储 B 的类型。

我正在尝试使用 PostgreSQL 的 ArrayAgg 和基于此gist的数据库的索引功能来消除查询中的连接以减少计算时间。(由于有 18000 个关系、4000 个 Bs 和 1500 个类别,我对每个报告的计算需要将近两个小时)并且我得到的错误是:psycopg2.ProgrammingError: aggregate functions are not allowed in GROUP BY LINE 1: ... U0 ."id", U2."B" HAVING U0."id" = ANY((ARRAY_AGG(...

我已使用Brad Martsberger 解决上一个问题的方法来计算按 B 的类别分组的 B 中发生的每个 A 强度的总和、B 的每个类别中计算的强度和的最小值和最大值以及每个 B 类别中每个 A 的发生率以及 B 本身在该类别中的出现:

我该如何解决这个问题?

有没有其他有效的替代方案?

0 投票
1 回答
7788 浏览

sql - 如何在 PostgreSQL 中通过 array_agg 计算一个组

这是我的 SQL: SELECT t.uid, array_agg(t.place) FROM tour_tracking t WHERE (orderon::time BETWEEN '18:00:00' AND '20:00:00') GROUP BY t.uid;

原产地结果:
|---------------|----------------------| | uid | place | |---------------|----------------------| | a01 | {hk, hk, jp} | |---------------|----------------------| | a02 | {jp, jp, jp, jp, uk} | |---------------|----------------------|

现在我想为每个分组的 uid 计算每个 DISTINCT 位置。希望的结果:

|---------------|--------------------------------------| | uid | place | |---------------|--------------------------------------| | a01 | something like this: {hk,2, jp,1} | |---------------|--------------------------------------| | a02 | {jp:4, uk:1} | |---------------|--------------------------------------|
我尝试结合一些count()sql 查询但不起作用..,如何进行正确的查询?

PostgreSQL 版本:10.3

0 投票
1 回答
1958 浏览

sql - BigQuery SQL Select 返回键值对而不是两个单独的列

我正在尝试在 bigquery 上的 select 语句中合并我的 2 列,以便我有一列带有键值对而不是两列(一列带有键,一列带有值)。我曾尝试使用 array_agg() 但每当我这样做时,它都会在我的语句的第一行中导致错误:“一个表达式引用了既不分组也不聚合的列 colName”

任何有关如何执行此操作或可能导致我的 array_agg 错误的建议将不胜感激。

0 投票
1 回答
1752 浏览

postgresql - Postgresql 使用 array_agg 和 jsonb_build_object

我正在从各种表中构建一个 JSON 对象。我已经成功获得以下代码几乎可以做我想做的事。唯一的问题是聚合数组被设置为另一个对象,我只希望主对象中的项目数据指向所选行的数组。

这将返回以下 json

当我想要

0 投票
1 回答
1117 浏览

google-bigquery - BigQuery 的 ARRAY_AGG 函数中“ORDER BY”的错误行为

我认为ARRAY_AGGBigQuery 中的函数似乎在ORDER BY. 这里有一些 SQL 来解释:

此查询返回;

但我希望是;

似乎函数中的ORDER BY子句ARRAY_AGG不能正常工作,因为a1并且a4顺序错误。

此外,当我用or替换两个COUNT(*)部分中的任何一个时,很难理解查询完全按预期工作,这意味着;COUNT(user_id)COUNT(team_id)

或者

据我了解,在这种情况下,这些查询必须返回与原始查询相同的结果。这对我来说很困惑。可能是错误或我误解的东西?


一些额外的信息。

内部子查询;

这返回;

因此,直接通过 with 子句创建这些数据并运行相同的聚合查询;

结果变成了我想要的;

我不明白发生这种情况的原因。我完全不解。任何想法或建议表示赞赏。

0 投票
1 回答
45 浏览

sql - 在 postgres 中生成 array-agg(...)s

使用 Postgres 10,我有代表“单位”、每个单位所属的“组”以及每对单位之间的“距离”的表格。

我现在想要一个组到组的距离表,它汇总了每对组的所有单元到单元的距离——即从一组中的所有单元到另一组中的所有单元的距离的聚合数组。

我有的

我想要的是

我不确定如何为所有组组配对返回所有此类数组并生成上面描述的表格。目前,我只能通过单独定义站点(如下面的 x 和 y)来获取这些数组。

谢谢

0 投票
2 回答
247 浏览

sql - PostgreSQL array_agg 但有停止条件

我有一个包含儿童记录的表格,我想按月按降序获得逗号分隔的结果,但每个月的儿童状态都有一个中断条件。如果状态为0,则将其推送到数组,但如果状态为1,则不要将其推送并打破它,也不要检查前几个月的记录。

桌子

儿童表

期望的输出:

期望的输出

我已经尝试过这种方式,这给了我几个月的时间。但我不知道如何在status = 1条件下为每个孩子打破它

0 投票
2 回答
271 浏览

postgresql - postgresql:自加入数组

我的问题是关于为以下用例形成 Postgres SQL 查询

方法#1

我有一个像下面这样的表,我在不同类型(a、b、c、d)之间生成相同的 uuid,比如映射不同的类型。

方法#2

我创建了两个表供 id 输入,然后 id 到 master_guid,如下所示

表格1:

表2

我想用两种方法得到如下输出:

我已经尝试在 ids 上使用 array_agg 进行自连接,并根据 uuid 进行分组,但无法获得所需的输出。

使用以下查询填充数据:

方法#1

方法#2

0 投票
1 回答
295 浏览

postgresql - 尝试将包含 timestampz 数组的列拆分为 Postgres 中的分隔文本字符串时出现“函数不存在”错误

我有一个表,其中的列包含要转换为字符串的数组,因此我可以通过分隔符将它们拆分为多个列。

我在处理带有时区的日期数组时遇到了麻烦。

在上面的代码中,我创建了一个表的物化视图,以将与某些位置相关的所有表条目合并到单行中。

如何为每个 event_date 条目创建额外的列,就像我对名称所做的那样(例如,'name' 数组中的 Name1、Name2 和 Name3)?

我尝试将数组更改为字符串格式:

但这会引发错误:

“函数 array_to_string(带有时区 [] 的时间戳)不存在”

并且转换为不同的数据类型总是会产生错误,说我不能从类型 timestampz 转换为其他任何东西。