SELECT CAST(squad.id AS TEXT) AS squadId, COALESCE(squad.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, squad.score AS score, squad.member_limit AS memberLimit, squad.message AS message, squad.information AS info, squad.last_member_login_time AS lastMemberLoginTime FROM squad LEFT JOIN squad_member member ON member.squad_id = squad.id LEFT JOIN squad_member leader ON leader.squad_id = squad.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(squad.id AS TEXT) = :squadId) AND (:search IS NULL OR COALESCE(squad.name, '') LIKE '%' || :search || '%') GROUP BY squad.id ORDER BY squad.score DESC, squad.id LIMIT COALESCE(:limit, 500)