gpt4 book ai didi

sql - 如何查询共享另一个值的值

转载 作者:行者123 更新时间:2023-11-29 12:21:01 26 4
gpt4 key购买 nike

服务器上的 Greenplum 4.2.2.4(类似于 PostgreSQL 8.2)。

我有这样的数据:

id    | user
------+------
12345 | bob
12345 | jane
12345 | mary
44455 | user1
44455 | user2
44455 | user3
67890 | bob
53756 | bob
53756 | bob
53756 | bob
25246 | jane
54383 | jane
54383 | jane
54383 | jane

我只想返回“id”由多个唯一“用户”值共享的行。但是,我还根据我感兴趣的“用户”值列表进行查询。例如:

WHERE user IN ('mary','bob','user2')

我希望查询返回:

id    | user
------+------
12345 | bob
12345 | jane
12345 | mary
44455 | user1
44455 | user2
44455 | user3

我该怎么做?

最佳答案

您可以使用窗口函数来做到这一点:

select id, user
from (select t.*, min(user) over (partition by id) as minuser,
max(user) over (partition by id) as maxuser
from table t
) t
where minuser <> maxuser;

EDTI:没有窗口函数(我认为自 Postgres 8.1 以来就存在,但我相信 Erwin 在这件事上),你可以用 join 做同样的事情。和 group by :

select t.id, t.user
from table t join
(select user, min(user) as minuser, max(user) as maxuser
from table t
group by user
having min(user) <> max(user)
) tu
on t.user = tu.user;

关于sql - 如何查询共享另一个值的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24338223/

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