with RECURSIVE connected_players as (
	select name1 as player_name,
		name1 as group_root,
		matching_count,
		total_achievements1 as achievements,
		similarity_percentage
	from similar_pairs
	where similarity_percentage >= 70
	union
	select name2,
		name1,
		matching_count,
		total_achievements2,
		similarity_percentage
	from similar_pairs
	ity_percentage >= 70
	union
	select case
			when sp.name1 = cp.player_name then sp.name2
			else sp.name1
		end,
		cp.group_root,
		sp.matching_count,
		case
			when sp.name1 = cp.player_name then sp.total_achievements2
			else sp.total_achievements1
		end,
		sp.similarity_percentage
	from connected_players cp
		join similar_pairs sp on (
			sp.name1 = cp.player_name
			or sp.name2 = cp.player_name
		)
		and sp.similarity_percentage >= 70
	where case
			when sp.name1 = cp.player_name then sp.name2
			else sp.name2
		end != cp.group_root
)
select group_root,
	count(*) as group_size,
	group_concat(distinct player_name) as connected_players,
	MIN(similarity_percentage) as min_similarity,
	AVG(similarity_percentage) as avg_similarity,
	MIN(matching_count) as min_matching,
	AVG(matching_count) as avg_matching
from connected_players
where group_root in ('')
group by group_root
having count(*) > 1
order by count(*) desc,
	avg_similarity desc