我目前对学说不熟悉,最近2个小时我一直在尝试进行选择以获取特定字段的总和,但仅当布尔值为true时才选择,然后为布尔值为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
并且没有错误,甚至没有预期的结果。学说和案例陈述有问题吗?
在此先感谢您的帮助。很抱歉,如果缺少某些东西,我不想写太多的代码,这本来是“太多”的
答案 0 :(得分:0)
此布局适合您吗?
select sum(f.total)
from f
where f.prevision = 1
答案 1 :(得分:0)
简单地:
SELECT coalesce(sum(m.prevision), 0) as sumOfPrevision
from membre_facturation as m
GROUP BY m.id_utilisateur
在《教义2》中:
$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();
答案 2 :(得分:0)
好的,我一直在尝试其他离线操作,但是没有看到您的答案。看来,对于查询生成器而言,ELSE语句不是可选的。我这样写查询:
sum(case when (f.prevision = 1) then f.total else 0 end)
它实际上正在工作。我还将检查合并功能。也许它也会起作用。 也许我做错了其他事情,但事实是添加else语句可以为我解决问题。
你知道一个人比另一个人快吗?从我的看到,“ CASE”和“ COALESCE”非常相似。