SELECT CAST(squad.id AS TEXT) AS squadId, COALESCE(squad.name, '') AS name, MAX(CASE WHEN member.rank = 4 THEN CAST(member.user_profile_id AS TEXT) END) AS leaderProfileId, MAX(CASE WHEN member.rank = 4 THEN CAST(member_profile.prisoner_id AS TEXT) END) 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 user_profile member_profile ON member_profile.id = member.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)