Php 条令查询生成器使用案例选择计数

Php 条令查询生成器使用案例选择计数,php,sql,symfony,doctrine-orm,Php,Sql,Symfony,Doctrine Orm,我有下面的sql语句,我想转换成条令查询生成器。目标是计算有多少评级存在评级值为1和评级值为2的评级 SELECT COUNT(CASE WHEN rating.rating = 1 THEN rating.rating END) as rat1, COUNT(CASE WHEN rating.rating = 2 THEN rating.rating END) as rat2 FROM rating 这个sql语句工作得很好,但当我试图将它转换为一个条令语句时,它就不再工作了。当不应

我有下面的sql语句,我想转换成条令查询生成器。目标是计算有多少评级存在评级值为1和评级值为2的评级

SELECT 
COUNT(CASE WHEN rating.rating = 1 THEN rating.rating END) as rat1, 
COUNT(CASE WHEN rating.rating = 2 THEN rating.rating END) as rat2 
FROM rating 
这个sql语句工作得很好,但当我试图将它转换为一个条令语句时,它就不再工作了。当不应计算任何值时(因为不存在此值的评级),它将返回“1”而不是0。当没有什么可计算时,我怎么能告诉教条简单地返回零呢? 我尝试删除“ELSE 0”,但随后出现一个错误,即此部分是必需的

return $qb
        ->addSelect('COUNT(CASE WHEN r.rating = 1 THEN r.rating ELSE 0 END) as rat_1')
        ->addSelect('COUNT(CASE WHEN r.rating = 2 THEN r.rating ELSE 0 END) as rat_2')
        ->getQuery()
        ->getResult();
问候,

不需要“总和”-示例: votings 2,2,2,2,2应该返回5,因为值为2的评级获得了5次投票


正如vkp所提到的,您可以使用
SUM
,但不是求和评级,而是求和1或0来模拟
计数

SUM(CASE WHEN r.rating = 1 THEN 1 ELSE 0 END)

要根据另一列中的值计算一列中的不同id,模糊树的答案在这种情况下不起作用

要仅计算不同的值,应将null作为参数,并将其设置为null,如:

->addSelect('COUNT(DISTINCT(CASE WHEN r.rating = 1 THEN rating.rating ELSE :nada END)) as rat_1')
->setParameter(':nada', null)

使用
sum
而不是
count
来获取所需内容。嘿,我不想将值1+1+1+1或2+2+2+相加,我想计算一个值被评级的频率,例如2+2+2+2=4(使用值2评级的次数)。这才是我真正需要的。这就是解决办法,因为我不能直接在这里使用计数?谢谢。您的编辑注释是错误的-当使用dql时,它抛出“错误:意外的'NULL'”。SUM-建议工作正常。如果您需要根据另一列中的值对一列中的不同值进行计数,SUM没有帮助。对于这种情况,请参阅下面我的答案。谢谢!我试图在case语句中设置null,但一直得到一个错误。将其设置为参数非常有效。