gpt4 book ai didi

sql - Postgres : match pattern after GROUP BY

转载 作者:行者123 更新时间:2023-11-29 12:54:47 25 4
gpt4 key购买 nike

当组中至少有一行与 bar='baz' 匹配时,我想按 foo 对所有行进行分组。

我有这样的查询:

SELECT foo, string_agg(bar) 
FROM table
WHERE bar='baz'
GROUP BY foo;

但是,这显然遗漏了 bar!=baz 的行。如果组中至少有一个匹配,我想包括这些行。实现这一目标的最佳方法是什么?

我考虑过使用 array_agg(bar) 和 ANY 的子选择,例如:

SELECT foo, bars FROM (
SELECT foo, array_agg(bar) as bars
FROM table
WHERE 'baz' ANY(bars)
GROUP BY FOO
)

但这似乎是一个丑陋的解决方案,而且也不让我使用 string_agg。

最佳答案

使用EXISTS

SELECT foo, string_agg(bar) 
FROM table
WHERE EXIST (SELECT 1 FROM table t WHERE t.bar='baz' AND t.foo = foo)
GROUP BY foo;

IN也很有用

SELECT foo, string_agg(bar) 
FROM table
WHERE foo IN (SELECT t.foo FROM table t WHERE t.bar='baz')
GROUP BY foo;

关于sql - Postgres : match pattern after GROUP BY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46212322/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com