Doctrine query Builder case 语句抛出一个意想不到的语法错误

Doctrine query Builder case statement throw an unexpected syntax error

我目前正在放弃学说,过去 2 小时我一直在尝试制作 select 来获取特定字段的总和,但前提是布尔值为真,并且然后,当布尔值为 false

时,另一个 select 用于此字段的总和

我试着让我的 select 像 :

sum(case when (f.prevision = 1) then f.total end)
sum(case when (f.prevision = 0) then f.total end)

然后我还有其他人 select 加入,但那些并不重要。问题是学说会引发错误:

[Syntax Error] line 0, col 212: Error: Unexpected ')'

并且我通过控制台尝试了 select 和原生 SQL ,例如:

SELECT sum(case when prevision = 1 then total end)
from membre_facturation
GROUP BY id_utilisateur

并且没有错误,甚至是预期的结果。学说和案例陈述有问题吗?

在此先感谢您的帮助。抱歉,如果遗漏了一些东西,我不想写太多代码,这本来是 "too much"

除了大小写,这种布局适合你吗?

select sum(f.total) 
from f
where f.prevision = 1

简单地说:

SELECT coalesce(sum(m.prevision), 0) as sumOfPrevision
from membre_facturation as m
GROUP BY m.id_utilisateur

在 Doctrine2 中:

$this->createQueryBuilder('m')
     ->select('coalesce(sum(m.prevision = 1), 0) as sumOfPrevision') ## for true
     | OR |
     ->select('coalesce(sum(m.prevision = 0), 0) as sumOfPrevision') ## for false
     ->orderBy('m.id_utilisateur')
     ->getQuery()
     ->getResult();

好吧,我一直在尝试离线,然后没有看到你的答案。并且在查询生成器的情况下,ELSE 语句似乎不是可选的。我这样写查询:

sum(case when (f.prevision = 1) then f.total else 0 end)

它确实有效。我还将检查合并功能。也许它也会起作用。 或者也许我做错了什么,但问题是添加 else 语句为我解决了问题。

知道一个是否比另一个快吗?据我所见,"CASE" 和 "COALESCE" 非常相似。