在Symfony 2.4原则中获得AVG的最大值


Get Max of AVG in Symfony 2.4 Doctrine

我需要在符号条令中获得AVG列表的MAX

我对平均值的原则查询如下:

SELECT p,AVG(p.pathTime) as avgtime 
FROM ShopperAnalyticsEntityBundle:Path p 
 JOIN p.shopper sh JOIN p.floor f 
 JOIN f.store s 
WHERE p.floor=".$floorId." ".$filter." 
GROUP BY p.xPath, p.yPath

为了获得平均值列表的最大值,我将其修改为(在引用后):

SELECT MAX(avgtime) as maxtime 
FROM (SELECT p,AVG(p.pathTime) as avgtime 
      FROM ShopperAnalyticsEntityBundle:Path p 
       JOIN p.shopper sh 
       JOIN p.floor f 
       JOIN f.store s 
      WHERE p.floor=".$floorId." ".$filter." 
      GROUP BY p.xPath, p.yPath)

我得到以下错误:

[Semantical Error] line 0, col 38 near '(SELECT p,AVG(p.pathTime)': Error: Class '(' is not defined

因此,我切换到本机SQL以获得相同的结果:

$maxSQL   = "SELECT MAX(t.avgtime) as maxtime FROM ( SELECT AVG(p.path_time) as avgtime FROM  path p JOIN shopper sh JOIN floor f JOIN store s WHERE p.floor_id=".$floorId." ".$filter." GROUP BY p.x_path, p.y_path ) t ";
$connection = $em->getConnection();
$statement = $connection->prepare($maxSQL);
$statement->execute();
$results = $statement->fetchAll();

我得到了结果,但SQL运行需要23.4457秒

有人能在《学说》中提出一个简单的方法来解决这个问题吗。

您应该这样使用dotrine:

$query = Doctrine_Query::create()
  ->select('MAX(avgtime) as maxtime ')
  ->from('(SELECT p,AVG(p.pathTime) as avgtime 
           FROM ShopperAnalyticsEntityBundle:Path p 
           JOIN p.shopper sh 
           JOIN p.floor f 
           JOIN f.store s 
           WHERE p.floor=".$floorId." ".$filter." 
           GROUP BY p.xPath, p.yPath)
        ')
  ->execute();

你的怎么样?