Cảm ơn các bạn. Cuối cùng có vẻ như tôi đã tự giải quyết. Ngoài ra tôi không chắc chắn nó là chính xác. Bây giờ nó cho thấy câu trả lời đúng.
Original truy vấn MySQL mà hoạt động hoàn hảo:
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
Tôi đã thử nó chuyển sang DQL. Thật không may do các dấu ngoặc đơn của bạn không thể sử dụng trong hàm tổng hợp của Doctrine. Đây là cách tôi giải quyết. Bây giờ nó đếm tất cả A, B, C, D, F từ bảng điểm. Và thông tin về lớp học (thư và số) đã được lấy ra từ bảng cha của nó. Các lớp A, B, C, D, F không phải là trường chính xác mà tôi muốn. Nó giống như hình dưới đây.
Nó có thể được loại lừa
$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();
Bạn truy vấn sẽ tạo ra kết quả sai vì 'SUM (g.final> 89,5) 'là không tương đương với' SUM (g.final)> 89.5' –
Có, tôi biết, tôi đã mô tả truy vấn này là giải pháp thay thế, Cảm ơn bạn đã làm rõ – Matteo