SELECT CAST(s.id AS TEXT) AS squadId, COALESCE(s.name, '') AS name, CAST(leader.user_profile_id AS TEXT) AS leaderProfileId, CAST(leader_profile.prisoner_id AS TEXT) AS leaderPlayerId, COUNT(member.id) AS memberCount, s.score AS score, s.member_limit AS memberLimit, s.last_member_login_time AS lastMemberLoginTime, s.last_member_logout_time AS lastMemberLogoutTime FROM squad s LEFT JOIN squad_member member ON member.squad_id = s.id LEFT JOIN squad_member leader ON leader.squad_id = s.id AND leader.rank = 4 LEFT JOIN user_profile leader_profile ON leader_profile.id = leader.user_profile_id WHERE (:squadId IS NULL OR CAST(s.id AS TEXT) = :squadId) AND (:search IS NULL OR COALESCE(s.name, '') LIKE '%' || :search || '%') GROUP BY s.id ORDER BY s.score DESC, s.id LIMIT COALESCE(:limit, 500)