查找具有相同值的键对postgresql
Finding pairs of keys with the same values postgresql
我想编写一个 SQL 查询来查找具有相同值的键对。每个键都可以有多个值。
table 示例:
id, key
a, 1
a, 2
b, 1
c, 1
c, 2
所以在这个例子中,唯一的一对是 (a,c),因为它们都有键 1 和 2,而 b 只有键 1。
为了解决这个问题,我是这样想的
(SELECT id FROM table
WHERE table.id = '[id]')
EXCEPT
(SELECT id FROM table
WHERE table.id = '[id]')
其中 [id] 可以是 a、b 或 c。如果该查询 returns 没有行,则它们具有相同的值。但在那之后我就卡住了。
我在考虑两个聚合级别:
select keys, array_agg(id) as ids
from (select id, array_agg(key order by key) as keys
from t
group by id
) t
group by keys
having count(*) > 1;
我想编写一个 SQL 查询来查找具有相同值的键对。每个键都可以有多个值。
table 示例:
id, key
a, 1
a, 2
b, 1
c, 1
c, 2
所以在这个例子中,唯一的一对是 (a,c),因为它们都有键 1 和 2,而 b 只有键 1。
为了解决这个问题,我是这样想的
(SELECT id FROM table
WHERE table.id = '[id]')
EXCEPT
(SELECT id FROM table
WHERE table.id = '[id]')
其中 [id] 可以是 a、b 或 c。如果该查询 returns 没有行,则它们具有相同的值。但在那之后我就卡住了。
我在考虑两个聚合级别:
select keys, array_agg(id) as ids
from (select id, array_agg(key order by key) as keys
from t
group by id
) t
group by keys
having count(*) > 1;