GROUP BY

Par Adiel DJAGBA, il y a 3 ans


J'essaye de faire une requête avec group by mais j'obtient une erreur

return $this->createQueryBuilder('av') ->where('av.dateAssur between :val1 and :val2') ->setParameter('val1', $value1) ->setParameter('val2', $value2) ->groupBy('av.vehicule') ->getQuery() ->getResult() ;

Ce que je veux

Aidez moi à résoudre le problème s'il vous plaît

Ce que j'obtiens

An exception occurred while executing a query: SQLSTATE[42803]: Grouping error: 7 ERREUR: la colonne « a0_.id » doit apparaître dans la clause GROUP BY ou doit être utilisé dans une fonction d'agrégat

3 réponses

Kareylo, il y a 3 ans

Je ne connais pas Symfony et Doctrine plus que ça, mais quelque chose comme ça devrait fonctionner :

return $this->createQueryBuilder('av') ->select('av.vehicule') ->where('av.dateAssur between :val1 and :val2') ->setParameter('val1', $value1) ->setParameter('val2', $value2) ->groupBy('av.vehicule') ->getQuery() ->getResult();
Kareylo, il y a 3 ans

L'erreur dit que tu essaies de faire un GROUP BY, mais qu'un des éléments (d'après la requête, j'ai envie de dire tous), doivent être mis soit dans le GROUP BY, soit dans une fonction d'agrégat (COUNT, SUM, MIN, MAX, AVG), soit être retirée de la requête.

Voici le genre de requête générée

SELECT id, name, vehicule WHERE dateAssur BETWEEN :val1 and :val2 GROUP BY vehicule

Et SQL voudrait quelque chose comme ceci :

SELECT id, name, vehicule WHERE dateAssur BETWEEN :val1 and :val2 GROUP BY vehicule, id, name ---- SELECT vehicule, COUNT(id) WHERE dateAssur BETWEEN :val1 and :val2 GROUP BY vehicule ---- SELECT vehicule WHERE dateAssur BETWEEN :val1 and :val2 GROUP BY vehicule
Adiel DJAGBA, il y a 3 ans

Mon probleme c´est de savoir comment l´écrire en symfony repository createQueryBuilder et non en sql simple.
Merci