Doctrine 2 - GROUP BY 两列,得到不正确的值

Posted

技术标签:

【中文标题】Doctrine 2 - GROUP BY 两列,得到不正确的值【英文标题】:Doctrine 2 - GROUP BY two columns, gets incorrect values 【发布时间】:2021-12-08 23:57:01 【问题描述】:

在我的数据库中,我有与tasks 相关的表与user 表。 我想获取特定状态的任务列表,按用户和状态分组。 这是我的查询:

$this->createQueryBuilder('t')
      ->select('t.assignee, COUNT(t.id) as count, t.state')
      ->join('t.assignee', 'user')
      ->andWhere('t.state IN (:states)')
      ->setParameters([
         'states' => array($states)
      ])
      ->addGroupBy('t.assignee')
      ->addGroupBy('t.state')
      ->getQuery()
      ->getResult()

不幸的是,该查询没有返回正确的记录。结果是每个用户只有一条记录,尽管它应该返回一个用户的一些记录,按任务类型排序。 你能帮我更正我的问题吗?

【问题讨论】:

【参考方案1】:

你必须先设置groupBy方法,然后再使用addGroupBy方法。

您的代码将如下所示:

$this->createQueryBuilder('t')
      ->select('t.assignee, COUNT(t.id) as count, t.state')
      ->join('t.assignee', 'user')
      ->andWhere('t.state IN (:states)')
      ->setParameters([
         'states' => array($states)
      ])
      ->groupBy('t.assignee')
      ->addGroupBy('t.state')
      ->getQuery()
      ->getResult()

【讨论】:

【参考方案2】:

也将andWhere 更改为where

$em = $this->getDoctrine()->getManager();
$query = $em->getRepository('App:Entity')->createQueryBuilder('t');
$query
      ->select('t.assignee, COUNT(t.id) as count, t.state')
      ->join('t.assignee', 'user')
      ->where($query->expr()->in('t.state', array($states)))
      ->groupBy('t.assignee')
      ->addGroupBy('t.state')
      ->getQuery()
      ->getResult();

【讨论】:

以上是关于Doctrine 2 - GROUP BY 两列,得到不正确的值的主要内容,如果未能解决你的问题,请参考以下文章

如何在 django 中将两列与 group by 相乘和求和

BigQuery 对两列使用 Group By 函数,顺序无关紧要

如何以最佳方式按两列进行 GROUP BY 和计数?

SQL使用group by获取SUM,但有条件地对两列之一的内容求和

在两列上使用 COUNT 和 GROUP BY 的 SQL 查询非常慢

mysql 可以group by 两个字段吗