您需要为一个ID汇总所有event_id:
select id
from table_a
group by id
having array_agg(event_id) @> array[101,103];
的@>
是操作者包含所以它会检查是否所有的event_ids数组包含与这两个ID的数组。
这将返回 至少 具有两个事件101和103(这是您在问题中要求的)的任何id 。
如果你想找到那些有ID的 这两个event_ids(其中您的样本数据中不包含),你可以使用:
select id
from table_a
group by id
having array_agg(distinct event_id order by event_id) = array[101,103];
请注意,数组中元素的顺序对=
运算符很重要(与“ contains”@>
运算符不同)