この質問の言い方がよくわからなかったので、ここに詳細を示します。2 つのビット文字列間のハミング距離を計算するトリックを使用しています。クエリは次のとおりです。
select length(replace(x::text,'0',''))
from (
select code # '000111101101001010' as x
from codeTable
) as foo
基本的に、2 つの文字列間の xor を計算し、すべての 0 を削除してから、長さを返します。これは、2 つのビット文字列間のハミング距離と機能的に同等です。残念ながら、これはハミング距離のみを返し、それ以外は何も返しません。codeTable テーブルには、person_id という列もあります。最小ハミング距離とそれに関連付けられた ID を返せるようにしたいと考えています。最小ハミング距離を返すのは簡単です。'length' 部分の周りに min() を追加するだけです。
select min(length(replace(x::text,'0','')))
from (
select code # '000111101101001010' as x
from codeTable
) as foo
これは問題ありませんが、person_id ではなく、ハミング距離のみを返します。そのハミング距離に関連付けられた person_id を返すために何をする必要があるかわかりません。
これを行う方法について誰か考えがありますか?