按外键与指定外键匹配的次数排序

Sort foreign keys by how many times they match with specified foreign key

我有一个带有复合键 idname 的 table,其中 id 是另一个 table.

的外键
id name
1 a
1 b
1 c
2 b
2 f
3 b
3 c
3 f
4 f

我需要对哪些 id-s 具有最匹配的 'name' 值作为示例 1 的 id 进行排序。 在这里,结果将是 [3, 2](id 4 不匹配一次),id3 匹配 2 次(b 和 c),id2 匹配 1 次(b)。

我该如何查询?

理想情况下,它会 return 有序对 (id, match_count).

可以通过加入和分组轻松完成:

-- using id = 1 as reference

select t1.id, count(*) as match_count
from (select id, name from t where id <> 1) as t1
join (select name from t where id = 1) as t2 on t1.name = t2.name
group by t1.id
order by match_count desc