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

Doctrine DQL query to Mysql query syntax error

我很难找出为什么这个 Doctrine dql 查询在我的 symfony 应用程序中不起作用。

Mysql查询是这样的:

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 条件。

此外,您似乎在尝试计算 email 不为空的情况,而不是使用 COUNT 函数(它将计算 nullszeroes 以及 1's) 你需要使用 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