Doctrine DQL查询到Mysql查询语法错误

问题描述 投票:0回答:1

我很难找出为什么该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'

过去有人遇到过这个吗?

php symfony doctrine doctrine-query
1个回答
0
投票

您的CASE块需要一个ELSE条件。

此外,您似乎在尝试计算电子邮件不为空的情况,而不是使用COUNT函数(它将计算nullszeroes以及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
© www.soinside.com 2019 - 2024. All rights reserved.