我现在已经退出了新的学说,我一直在尝试在最后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”非常相似。