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
函数(它将计算 nulls
和 zeroes
以及 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
我很难找出为什么这个 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
函数(它将计算 nulls
和 zeroes
以及 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