- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
t1
id|entity_type
9|3
9|4
9|5
2|3
2|5
t2
id|entity_type
1|3
1|4
1|5
SELECT t1.id, array_agg(t1.entity_type)
FROM t1
GROUP BY
t1.id
HAVING ARRAY_AGG(t1.entity_type by t1.entity_type) =
(SELECT ARRAY_AGG(t2.entity_type by t2.entity_type)
FROM t2
WHERE t2.id = 1
GROUP BY t2.id);
结果:
t1.id = 9|array_agg{3,4,5}
我有两个表 t1
和 t2
。我想获取 t1.id
的值,其中 t1.entity_type
数组等于 t2.entity_type
数组。
在这种情况下,一切正常。对于 t2.id = 1
,我收到 t1.id = 9
。两者具有相同的 entity_type
数组:{3,4,5}
现在我想获取 t1.id
不仅适用于相等的集合,还适用于较小的集合。如果我这样修改 t2
:
t2
id|entity_type
1|3
1|4
并以这种方式修改查询:
SELECT t1.id, array_agg(t1.entity_type)
FROM t1
GROUP BY
t1.id
HAVING ARRAY_AGG(t1.entity_type by t1.entity_type) >= /*MODIFICATION*/
(SELECT ARRAY_AGG(t2.entity_type by t2.entity_type)
FROM t2
WHERE t2.id = 1
GROUP BY t2.id);
我没有收到预期的结果:
t1.id = 1 has {3, 4, 5}
t2.id = 1 has {3, 4}
t1
中包含 t2
中的数组的数组应该符合条件。我希望收到与第一种情况一样的结果,但我没有得到任何行。
是否有类似的方法:ARRAY_AGG 包含另一个 ARRAY_AGG?
最佳答案
首先,语法错误。我假设你的意思是:
ARRAY_AGG(t1.entity_type <b>ORDER BY</b> t1.entity_type)
接下来,使用两次不同的 array_agg()
调用会效率低下。使用相同的(SELECT
列表和 HAVING
子句中的 ORDER BY
):
SELECT id, array_agg(entity_type ORDER BY entity_type) AS arr
FROM t1
GROUP BY 1
HAVING array_agg(entity_type ORDER BY entity_type) = (
SELECT array_agg(entity_type ORDER BY entity_type)
FROM t2
WHERE id = 1
-- GROUP BY id -- not needed
);
@>
赞Nick commented ,您的第二个查询 将使用“包含”运算符 @>
SELECT id, array_agg(entity_type ORDER BY entity_type) AS arr
FROM t1
GROUP BY 1
HAVING array_agg(entity_type ORDER BY entity_type) @> (
SELECT array_agg(entity_type ORDER BY entity_type)
FROM t2
WHERE id = 1
);
但这对于大表来说效率很低。
这是一个关系 split 的案例。根据您的(缺失的)精确 表定义,有更有效的技术。我们在这个相关问题下收集了整个武器库:
假设 (id, entity_type)
在两个表中都是唯一的,这对于大表来说应该明显更快,特别是因为它可以使用t1
上的索引(与您的原始查询相反):
SELECT t1.id
FROM t2
JOIN t1 USING (entity_type)
WHERE t2.id = 1
GROUP BY 1
HAVING count(*) = (SELECT count(*) FROM t2 WHERE id = 1);
你需要两个索引:
首先在 t2.id
上,通常由主键覆盖。
第二个关于 t1.entity_type
:
CREATE INDEX t1_foo_idx ON t1 (entity_type, id);
添加的 id
列是可选的,以允许仅索引扫描。列的顺序是必不可少的:
关于sql - array_agg 包含另一个 array_agg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26509108/
t1 id|entity_type 9|3 9|4 9|5 2|3 2|5 t2 id|entity_type 1|3 1|4 1|5 SELECT t1.id, array_agg(t1.
我有一个 SQL 表 message(application, type, action, date, ...) 我想获取一个类型的所有操作和一个应用程序的所有类型如果可能,单个查询。 到目前为止,我
我有以下查询: SELECT DISTINCT ON (ps.p) m.groundtruth, ps.p, ARRAY_AGG(m.anchor_id), ARRAY_AGG(m.id) FRO
我想使用 array_agg在子查询中,然后在我的主查询中通过它的数组索引使用聚合数据,但是,在尝试了许多不同的方法之后,我真的不知道应该怎么做;有人可以解释为什么在下面的示例中我得到了一系列 Non
我正在尝试连接一个表,该表可能具有多个给定 ID 的条目,并将与该 ID 对应的行聚合到一个数组中。这在 SQL 查询中看起来如下: SELECT * from data LEFT JOIN (sel
我有一张表格,其中列出了潜在客户、他们的事件和他们的销售代表。每个客户最多可以有 1 名销售代表。我建立了一个汇总表,在其中汇总客户事件,并按销售代表对其进行分组,并按客户创建日期进行筛选。这不是一个
我在带有 Java-8 的 Ubuntu 10.6-1.pgdg18.04+1 上使用 PostgreSQL 10.6。我有两个表: 表格测试 Column | Type
是否有任何替代 PostgreSQL array_agg() 函数的方法,以便它不会以以下格式返回值:'{x,y,z,}' . 我可以让它只返回:'x,y,z' 吗? 最佳答案 在 PostgreSQ
我目前有一个这样的示例标记表: id | tag | user_id | video_id 1 | cake | 1 | 1 2 | cookie |
作为测试,我创建了这个模式: CREATE TABLE simple_table (client_id int4, order_id int4); INSERT INTO simple_table (
我正在尝试创建一个返回字符串数组的函数,我可以在没有函数的情况下执行此操作并返回 record[] 类型,当我尝试返回该类型时导致它表示不支持的功能。 CREATE OR REPLACE FUNCTI
我有以下 Postgres 查询: SELECT array_agg("Esns".id ) FROM public."Esns", public."PurchaseOrderItems"
我正在尝试让 array_agg 与 Postgresql 中的数组类型一起工作,但我无法弄清楚这是否可行,如果可行,该怎么做。我查询的相关部分如下所示: array_agg(ARRAY[e.aler
表“动物”: animal_name animal_type Tom Cat Jerry Mouse Kermit Frog 查询: SELECT array_t
我正在尝试创建一个具有不同结构的数组作为列的值,类似这样 select array_agg(distinct struct(field_a, field_b)) as c FROM tables ..
我在 postgres 中有一对多的关系(事件有很多 EventUser),并且想扫描并存储到结构 Event . // EventUser struct type EventUser struct
我想为我的表中的每个用户选择不同的列值(在 Google BigQuery 中)。我想过使用 ARRAY_AGG()喜欢: SELECT user_id, ARRAY_AGG(DISTINCT fie
如何计算由 ARRAY_AGG() 在 PostgresQL 中创建的数组对象中不同元素的数量?这是一个用于讨论目的的玩具示例: SELECT ARRAY_AGG (first_name || ' '
考虑这个例子: SELECT comment_date , array_agg(user_id) users , array_agg(comment) comme
我有一个表 calls 和 calls_statistics。 calls 有一个主键calls_id,它是calls_statistics 中的一个外键。 调用当前包含 16k 个条目。 当我运行时
我是一名优秀的程序员,十分优秀!