我需要在符号条令中获得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();
你的怎么样?