Grazie ragazzi. Finalmente sembra che abbia risolto da solo. Inoltre non sono sicuro che sia corretto. Per ora mostra la risposta corretta.
originale query MySQL che funziona perfettamente:
SELECT avg(final) as Final, SUM(Final>89.5) as a, SUM(Final<89.5 AND Final>79.5) as b, SUM(Final<79.5 AND Final>69.5) as c, SUM(Final<69.5 AND Final>59.5) as d , SUM(Final<59.5) as f, Ca.letter, Ca.number, subject_id FROM grades as G join courses as C on G.course_id = C.id join schoolclasses as Ca on Ca.id=C.schoolclass_id where C.subject_id = 1 and G.quarter_id in (1, 2) group by G.course_id
ho provato a convertire DQL. Sfortunatamente a causa tua non è stato possibile utilizzare la parentesi nella funzione aggregata di Doctrine. Questo è il modo in cui ho risolto. Ora conta tutti A, B, C, D, F dalla tabella dei voti. E le informazioni sulla classe della scuola (lettera e numero) sono state recuperate dalla sua tabella principale. I gradi A, B, C, D, F non sono esattamente il campo che volevo. È uguale all'immagine qui sotto.
Si potrebbe tipo di trucco
$rsm = new ResultSetMapping();
$rsm->addEntityResult('Ficus\EschoolBundle\Entity\Grade', 'g');
$rsm->addFieldResult('g', 'Final', 'final');
$rsm->addFieldResult('g', 'A', 'a');
$rsm->addFieldResult('g', 'B', 'b');
$rsm->addFieldResult('g', 'C', 'c');
$rsm->addFieldResult('g', 'D', 'd');
$rsm->addFieldResult('g', 'F', 'abcd');
$rsm->addFieldResult('g', 'Class', 'a1');
//$query = $this->getEntityManager()->createNativeQuery('SELECT avg(final) as Final, SUM(Final>89.5) as a, SUM(Final<89.5 AND Final>79.5) as b, SUM(Final<79.5 AND Final>69.5) as c, SUM(Final<69.5 AND Final>59.5) as d , SUM(Final<59.5) as f, Ca.letter, Ca.number, subject_id FROM grades as G join courses as C on G.course_id = C.id join schoolclasses as Ca on Ca.id=C.schoolclass_id where C.subject_id = 1 and G.quarter_id=1 group by G.course_id', $rsm);
$query = $this->getEntityManager()->createNativeQuery(''
. 'SELECT avg(g.final) as Final, '
. 'SUM(Final>89.5) as A, '
. 'SUM(Final<89.5 AND Final>79.5) as B, '
. 'SUM(Final<79.5 AND Final>69.5) as C, '
. 'SUM(Final<69.5 AND Final>59.5) as D, '
. 'SUM(Final<59.5) as F, '
. 'CONCAT(ca.number, ca.letter) as Class '
. 'FROM grades as g '
. 'JOIN courses as c on g.course_id = c.id '
. 'JOIN schoolclasses as ca on ca.id = c.schoolclass_id '
. 'WHERE c.subject_id = ? AND g.quarter_id in (?) group by g.course_id '
. 'ORDER BY ca.number, ca.letter ', $rsm);
$query->setParameter(1, $rid);
$query->setParameter(2, $filterQuarter);
$grades = $query->getArrayResult();
query È produrrà risultati errati a causa 'SUM (g.final> 89,5)' non è equivalente a 'SUM (g.final)> 89.5' –
Sì, lo so, ho descritto questa query come soluzione alternativa, grazie per il chiarimento – Matteo