Doctrine 原则:DQL中的子查询

Doctrine 原则:DQL中的子查询,doctrine,subquery,dql,Doctrine,Subquery,Dql,我试图在一个表上使用DQL计算一个值。假设此表名为“表”。它有5个柱: 身份证 人数 动物数量 区域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计算一个值。假设此表名为“表”。它有5个柱:

  • 身份证
  • 人数
  • 动物数量
  • 区域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的原则中,您将如何做到这一点?

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


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

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


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

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

在任何情况下,进行两次查询并在第二次查询中导入第一次查询的结果都可以解决问题。不幸的是,我们的数据库使用率很低。此外,有时我们必须只执行一个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
                    ))
                    ;
    }
}

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

在任何情况下,进行两次查询并在第二次查询中导入第一次查询的结果都可以解决问题。不幸的是,我们的数据库使用率很低。此外,有时我们必须只执行一个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
                    ))
                    ;
    }
}

Stackoverflow明天才让我做;)Stackoverflow明天才让我做;)