0
게시물 하단에 표시된대로 EXPECTED RESULT
을 얻기 위해 아래 쿼리를 수정하려고합니다. 아래 질문 중 하나 또는 둘 모두를 수정하여 원하는 것을 얻을 수 있습니까?다른 where 절에 avg() 및 백분율 계산 사용
이 만 반환 피드백 기록과 AVERAGE_RATING 총 :
버전 1)
$qb = $this->createQueryBuilder('f')
->select('COUNT(f.id) AS total')
->addSelect('AVG(f.rating) AS average_rating')
->join('f.customers', 'c')
->where('c.guid = :guid')
->setParameter('guid', $guid)
->getQuery()
->execute();
버전 2)
$qb = $em->createQuery(
'SELECT
COUNT(f.id) AS total,
AVG(f.ratingSeller) AS average_rating
FROM
WhateverBundle:Feedback f
JOIN
WhateverBundle:Customer c
WHERE
c.guid = :guid'
)
->setParameter('guid', $guid)
->getResult();
현재 결과 :
Array
(
[0] => Array
(
[total] => 11
[average_rating] => 4
)
)
FEEDBACKS 표
ID RATING DELIVERED CHECKED CUSTOMER_ID
1 5 Y Y 12
2 4 Y N 12
3 4 Y N 12
4 5 Y Y 12
5 2 N Y 12
Customers 테이블
GUID NAME
12 inanzzz
예상 결과 :
total = 11
average_rating = 4
delivered_percentage = 80% (should take only Y in count)
checked_percentage = 60% (should take only Y in count)
우수. 둘 다 완벽하게 작동합니다. 네, 일부 DB 디자인 문제가 있지만 불행히도 그걸로해야합니다! – BentCoder
건배! 고치기가 어렵지 않습니다. 새 열 'UPDATE table SET new_column = 1 WHERE old_column ='Y'' 등을 만든 다음 모든 것이 매핑되면 이전 열을 삭제하십시오. 그러나 코드는 마이그레이션하는 데 시간이 오래 걸릴 수 있습니다.) – sjagr
'Y'와'N'에 의존하는 코드가 너무 많아서 모든 것을 망칠 까봐 두렵습니다. 또한 그것은 다른 누군가의 DB이기 때문에 나는 단지 준비 만 할 권리가 있습니다. 어쨌든, 내 문제가 해결되었습니다. 다시 한번 감사드립니다. – BentCoder