use*_*259 7 php sql symfony doctrine-orm
我有以下sql语句,我想转换为doctrine查询生成器.目标是计算评级值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
Run Code Online (Sandbox Code Playgroud)
这个sql语句运行正常 - 但是当我尝试将它转换为Doctrine语句时,它就不再存在了.当什么都不应该被计算(因为没有对这个值的评级存在)时,它会返回一个"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();
Run Code Online (Sandbox Code Playgroud)
问候,
"sum"不是必需的 - 例如:投票2,2,2,2,2应该返回5,因为值为2的评级被投票5次.
要根据另一列中的值计算一列中的不同 id,模糊树的答案在这种情况下不起作用。
要仅计算不同的值,您应该将 null 作为参数并将其设置为 null,例如:
->addSelect('COUNT(DISTINCT(CASE WHEN r.rating = 1 THEN rating.rating ELSE :nada END)) as rat_1')
->setParameter(':nada', null)
Run Code Online (Sandbox Code Playgroud)
正如 vkp 所提到的,您可以使用SUM而不是对评分求和,而是将 1 或 0 相加来模拟COUNT
SUM(CASE WHEN r.rating = 1 THEN 1 ELSE 0 END)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2705 次 |
| 最近记录: |