gpt4 book ai didi

postgresql - 在反向 int 对中使用 DISTINCT 重复消除

转载 作者:行者123 更新时间:2023-12-04 08:34:12 25 4
gpt4 key购买 nike

我有以下问题:

create table memorization_word_translation
(
id serial not null
from_word_id integer not null
to_word_id integer not null
);
该表存储整数对,通常以相反的顺序排列,例如:
35 36
35 37
36 35
37 35
37 39
39 37
问题是 - 如果我进行查询,例如:
select * from memorization_word_translation
where from_word_id = 35 or to_word_id = 35
我会得到
35 36
35 37
36 35 - duplicate of 35 36
37 35 - duplicate of 35 37
在这个例子中如何使用 DISTINCT 来过滤掉所有重复项,即使它们被反转?
我只想保持这样:
35 36
35 37

最佳答案

您可以使用 ROW_NUMBER() 窗口函数来实现:

select from_word_id, to_word_id
from (
select *,
row_number() over (
partition by least(from_word_id, to_word_id),
greatest(from_word_id, to_word_id)
order by (from_word_id > to_word_id)::int
) rn
from memorization_word_translation
where 35 in (from_word_id, to_word_id)
) t
where rn = 1
demo .

关于postgresql - 在反向 int 对中使用 DISTINCT 重复消除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64876113/

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