Files
wow-AchievementSniffer/service/data/groupPlayers.sql
2025-05-18 23:48:22 +02:00

52 lines
1.3 KiB
SQL

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