Я нашел решение с двумя запросами (не стесняйтесь сказать, если у вас есть лучшее решение)
Это мой код работает, но в моем вопросе я упрощаю текст, в действительности мой счет хранится наТаблица user_session, так что у нее больше соединений и больше условий, но это может помочь.
Сначала я получаю все 5 лучших баллов с отдельной группой одинаковых баллов.
$now = new \DateTime();
$leaderScore = $this->createQueryBuilder('u')
->select('us.score')
->join('u.sessionUsers', 'us')
->join('us.session', 's')
->where(':now BETWEEN s.start_date AND s.end_date')
->setParameter('now', $now)
->setMaxResults(self::NUMBER_LEADERS_DISPLAY)
->distinct()
->orderBy('us.score', 'DESC')
->getQuery()
->getResult();
Я сохраняюхудший результат из 5 лучших:
$minScore = min($leaderScore);
И я делаю еще один запрос, чтобы получить всех пользователей с более высоким или равным счетом, чем $ minScore
$query = $this->createQueryBuilder('u')
->join('u.sessionUsers', 'us')
->join('us.session', 's')
->where(':now BETWEEN s.start_date AND s.end_date')
->andWhere('u.roles LIKE :role')
->andWhere('us.score >= :minScore')
->orderBy('us.score', 'DESC')
->setParameter('now', $now)
->setParameter('role', '%PLAYER%')
->setParameter('minScore', $minScore);
Надеюсь, эта помощь:)