我很难找出为什么该Doctrine dql查询在我的symfony应用程序中不起作用。
mysql querey是这个
SELECT (COUNT(case when c_email IS not NULL then 1 end )*100.00)/
COUNT( c_number) as percentage
FROM distinct_customers;
我的Symfony学说php代码是这个
public function invalidEmails()
{
$em = $this->getEntityManager();
$qb = $em->createQuery('
SELECT (count(case when ds.c_email IS NOT null then 1 end))*100/count(ds.c_number) as percentage FROM App\Entity\DistinctCustomers ds');
return $qb->getResult();
}
但是每次都会出现错误
[Syntax Error] line 0, col 69: Error: Expected Doctrine\ORM\Query\Lexer::T_ELSE, got 'end'
过去有人遇到过这个吗?
您的CASE
块需要一个ELSE
条件。
此外,您似乎在尝试计算电子邮件不为空的情况,而不是使用COUNT
函数(它将计算nulls
和zeroes
以及1
),您需要使用SUM
功能。
尝试一下:
SELECT(
SUM(
CASE
WHEN ds.c_email IS NOT null
THEN 1
ELSE 0
END
)
)*100/COUNT(ds.c_number) AS percentage
FROM App\Entity\DistinctCustomers ds