1

我正在尝试在一个表上使用 DQL 计算一个值。假设此表名为“TABLE”。它有 5 列:

  • ID
  • 人数
  • 动物计数
  • region_id
  • type_id

我正在寻找的结果是人的总和(按地区分组时)除以动物的总和(按类型分组时);

SQL 会是这样的:

SELECT SUM(people_count) / 
(
    SELECT SUM(animal_count) 
    FROM TABLE t2 
    GROUPED BY type_id
) 
FROM TABLE t1 
GROUPED BY region_id

你将如何使用 DQL 在 Doctrine 中做到这一点?

4

2 回答 2

1

我通过创建另一个查询、执行它并将结果包含在第一个查询中来解决了我的问题。

如果您正在处理一个简单的示例,这可能不是最好的方法,但对于我的代码架构来说,这是唯一的解决方案。

于 2012-06-19T09:20:53.527 回答
0

我有一个解决方案,但我认为可能有最好的解决方案来解决您的问题。

无论如何,进行两次查询并在第二次中导入第一次查询的结果可以是一个解决方案。不幸的是,它对我们的数据库的使用率很低。此外,有时我们必须只执行一个 SQL 来对每个示例的列结果进行排序。

<?php

namespace AppBundle\Repository;

use AppBundle\Entity\MyClass;
use Doctrine\ORM\EntityRepository;

class MyRepository extends EntityRepository
{
    public function findWithSubQuery()
    {
        return $this->createQueryBuilder('a')
                    ->addSelect(sprintf(
                        "(SELECT COUNT(b.id) FROM %s AS b WHERE b.a = a.id GROUP BY a.id) AS otherColumn",
                        MyClass::class
                    ))
                    ;
    }
}

我使用这个解决方案。也许子查询可以用 DQL ojbect 而不是 DQL 字符串编写。

于 2016-06-29T09:44:57.767 回答