Как составить запрос в Doctrine QB на выбоку максимального значения в группе?
Нужно группировать по od.name. Чтобы в результатах остались записи с максимальным значением поля od.price по группе.
$queryBuilder = $this->getEntityManager()->createQueryBuilder();
$queryBuilder->select('od')
->from(OrderDetail::class, 'od')
->where('od.name LIKE :chars')
->groupBy('od.name')
->orderBy('od.name','DESC')
->setParameter('chars', '%' . $chars . '%')
->setMaxResults(20);
return $queryBuilder->getQuery()->getResult();
пример таблицы:
| id | name | price |
| 1 | prim1 | 100 |
| 2 | prim1 | 250 |
| 3 | prim1 | 300 |
| 4 | prim2 | 90 |
| 5 | prim2 | 80 |
ожидаемый результат:
| id | name | price |
| 3 | prim1 | 300 |
| 4 | prim2 | 90 |
Ответы (1 шт):
Автор решения: Drakulitka
→ Ссылка
Вот так работает:
$queryBuilder->select( 'a' )
->from( OrderDetail::class, 'a')
->orderBy( 'a.name','DESC' )
->where('a.name LIKE :title')
->innerJoin( OrderDetail::class, 'b', 'WITH', 'a.price > b.price' )
->groupBy('a.name')
->setParameter('title', '%' . $chars . '%')
->setMaxResults(20);