- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果我使用 array_agg
来收集名字,我的名字用逗号分隔,但是如果有一个 null
值,那个 null 也会被当作一个名字在聚集。例如:
SELECT g.id,
array_agg(CASE WHEN g.canonical = 'Y' THEN g.users ELSE NULL END) canonical_users,
array_agg(CASE WHEN g.canonical = 'N' THEN g.users ELSE NULL END) non_canonical_users
FROM groups g
GROUP BY g.id;
它返回 ,Larry,Phil
而不仅仅是 Larry,Phil
(在我的 9.1.2 中,它显示 NULL,Larry,Phil
).
相反,如果我使用 string_agg()
,它只会显示名称(没有空逗号或空值)。
问题是我在服务器上安装了 Postgres 8.4
,而 string_agg()
在那里不起作用。 有没有办法让 array_agg 的工作方式类似于 string_agg() ?
最佳答案
使用 postgresql-9.3 可以做到这一点;
SELECT g.id,
array_remove(array_agg(CASE WHEN g.canonical = 'Y' THEN g.users ELSE NULL END), NULL) canonical_users,
array_remove(array_agg(CASE WHEN g.canonical = 'N' THEN g.users ELSE NULL END), NULL) non_canonical_users
FROM groups g
GROUP BY g.id;
更新:使用postgresql-9.4;
SELECT g.id,
array_agg(g.users) FILTER (WHERE g.canonical = 'Y') canonical_users,
array_agg(g.users) FILTER (WHERE g.canonical = 'N') non_canonical_users
FROM groups g
GROUP BY g.id;
更新 (2022-02-19):也与 postgresql-9.4 一起;
当数组中的所有值都为 null 而不是返回 null 时,这会导致一个空数组;
SELECT g.id,
coalesce( array_agg(g.users) FILTER (WHERE g.canonical = 'Y'), '{}' ) canonical_users,
coalesce( array_agg(g.users) FILTER (WHERE g.canonical = 'N'), '{}' ) non_canonical_users
FROM groups g
GROUP BY g.id;
关于sql - 如何使用 postgres 像 string_agg 一样排除 array_agg 中的空值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13122912/
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 个条目。 当我运行时
我是一名优秀的程序员,十分优秀!