我不太确定如何表达这个问题,所以这里有详细信息。我正在使用一种技巧来计算两个位串之间的汉明距离。这是查询:
select length(replace(x::text,'0',''))
from (
select code # '000111101101001010' as x
from codeTable
) as foo
本质上,它计算两个字符串之间的异或,删除所有 0,然后返回长度。这在功能上等同于两个位串之间的汉明距离。不幸的是,这只返回汉明距离,没有别的。在 codeTable 表中,还有一个名为 person_id 的列。我希望能够返回最小汉明距离和与之相关的 id。返回最小汉明距离很简单,只需在“长度”部分周围添加一个 min() 即可。
select min(length(replace(x::text,'0','')))
from (
select code # '000111101101001010' as x
from codeTable
) as foo
这很好,但是,它只返回汉明距离,而不是 person_id。我不知道我需要做什么才能返回与该汉明距离相关的 person_id。
有人知道如何做到这一点吗?