Doctrine查询Builder case语句会抛出意外的语法错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Doctrine查询Builder case语句会抛出意外的语法错误相关的知识,希望对你有一定的参考价值。

我现在已经退出了新的学说,我一直在尝试在最后2个小时做一个选择来得到一个特定字段的总和,但只有当一个布尔值为真,然后,另一个选择这个总和布尔值为false时的字段

我试着让我的选择如下:

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

然后我也有其他选择和加入,但那些并不重要。问题是该学说抛出一个错误:

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

我通过控制台尝试使用本机SQL进行选择:

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

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

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

答案

而不是案例,这种布局是否适合您?

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”非常相似。

以上是关于Doctrine查询Builder case语句会抛出意外的语法错误的主要内容,如果未能解决你的问题,请参考以下文章

Doctrine Query Builder,“介于”表达式和子查询之间

Doctrine2 查询(Builder)在使用“where”和“in”子句后失去关系

Doctrine Query Builder,“between”表达式和子查询

如何在使用jpa条件查询的case语句中使用concat函数

Doctrine ResultSetMapping(Builder) 没有显示任何结果

Doctrine DBAL 可以与 ORM Query Builder 混合使用吗?