Doctrine query building select MAX
Here is a final working query
$query = $this->createQueryBuilder('s'); $query->select('s, MAX(s.score) AS max_score'); $query->where('s.challenge = :challenge')->setParameter('challenge', $challenge); $query->groupBy('s.user'); $query->setMaxResults($limit); $query->orderBy('max_score', 'DESC'); return $query->getQuery()->getResult();
It's too late, but I write this for the records.
You can use "as HIDDEN" in SELECT statements to remove a field of the final result, this way you can use it for ordering or grouping without modifying result fields.
In your example:
$query = $this->createQueryBuilder('s');$query->select('s, MAX(s.score) AS HIDDEN max_score');$query->where('s.challenge = :challenge')->setParameter('challenge', $challenge);$query->groupBy('s.user');$query->setMaxResults($limit);$query->orderBy('max_score', 'DESC');