按外键与指定外键匹配的次数排序
Sort foreign keys by how many times they match with specified foreign key
我有一个带有复合键 id
和 name
的 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
我有一个带有复合键 id
和 name
的 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