mysql - 具有 SUM 中条件的 DQL

标签 mysql doctrine dql

我有一个像这样的 DQL:

$dql = "SELECT d.name, "
. "SUM(m.id and m.status = 'a') members, "
. "SUM(m.position_id = 19 and m.status = 'a') subcon, "
. "SUM(m.position_id = 20 and m.status = 'a') ojt, "
. "SUM(m.status = 'h') hr_intra "
. "FROM OssOrgBundle:User m "
. "RIGHT JOIN OssOrgBundle:Department d "
. "ON m.department = d.id "
. "GROUP BY d.id";

$qb = $em->createQuery($dql);
deptListCount = $qb->getResult();

Doctrine 是否支持带有条件的聚合函数 SUM? 我在 SQL 中尝试了查询,它有效。 我无法将其转换为 DQL

我也是这样做的:

$deptListCount = $em->createQueryBuilder("r")
->select("d.name")
->addSelect("SUM(m.id AND m.status = 'a') members")
->addSelect("SUM(m.position_id = 19 and m.status = 'a') subcon")
->addSelect("SUM(m.position_id = 20 and m.status = 'a') ojt")
->addSelect("SUM(m.status = 'h') hr_intra ")
->from("OssOrgBundle:Department", "d")
->leftJoin("OssOrgBundle:User", "m", "WITH", "m.deprtment = :id")
->groupBy("d.id")
->getQuery()
->getResult(AbstractQuery::HYDRATE_ARRAY);

还是不行

最佳答案

在 Doctrine 中,您不需要使用 case when 作为条件 sum

sum( case when m.position_id = 19 and m.status = 'a' then 1 else 0 end ) as subcon

改变 DQL 中的其余部分以及

m.id AND m.status = 'a' 不确定您要应用什么逻辑我假设您正在寻找的东西是

sum( case when m.id is not null and m.status = 'a' then 1 else 0 end ) as members

关于mysql - 具有 SUM 中条件的 DQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31158534/

相关文章:

symfony1 - Symfony 管理生成器 Doctrine executeCreate

mysql - Left Join with Where 子句返回空结果

php - 如何在 MySQL 插入语句中正确使用 str_to_date 的多个实例?

php - mysqli insert_id 不工作

php - Doctrine 一对多自引用不起作用

php - 使用 Doctrine 将 MySQL BIT 字段转换为 BOOLEAN

php - 在一个查询中显示两个 MySQL 选择

mysql - 旋转一个表并显示 n 个有序的时间序列

php - Doctrine 查询类不在实体目录中

php - 组合 IS NULL 和 :value in Doctrine 2 DQL