Symfony/Doctrine:玩家的SUM和AVG得分

gin*_*lin 4 sql average sum symfony doctrine-orm

我在我的数据库中有选项卡:PLAYERS和一个标签:SCORES.

在SCORES选项卡中,我有以下行:ID - IDPLAYER - SCORE

例如:

ID   IDPLAYER   SCORE
---------------------
1       1         5
2       2         4
3       1         3
4       2         1
5       1         9
Run Code Online (Sandbox Code Playgroud)

我想放一个模板:

对于" 玩家1 ",有3个分数.

得分的计数是" 17 "(9 + 3 + 5).

玩家得分的平均值是" 5.6 "(17totscores/3countScores).


我有一个ORM实体,没关系.

我有一个具有此功能的控制器:

public function avgScoreAction($id) {

$queryScore = $this->getDoctrine()
->getRepository('AcmeBundle:tabScores');

$queryAvgScore = $queryScore->createQueryBuilder('g')
->select("avg(g.score)")
->where('g.idPlayer = :idPlayer')
->setParameter('idPlayer', $id)
->getQuery();

$avgScore = $queryAvgScore->getResult();

$result = ("Score average: ".$avgScore);

return new Response($result);
Run Code Online (Sandbox Code Playgroud)

但是我有一个错误:

"Notice: Array to string conversion in this line:"

$result = ("Score average: ".$avgScore);
Run Code Online (Sandbox Code Playgroud)

如果我写这个:

$response = new Response();
$response->setContent(json_encode(array($avgScore)));
$response->headers->set('Content-Type', 'application/json');

return $response;
Run Code Online (Sandbox Code Playgroud)

我明白了:

[[{"1":"5.6667"}]]
Run Code Online (Sandbox Code Playgroud)

这是正确的平均值,但是:[[{"1":"和"}]] ?????

S.T*_*ane 10

what is: [[{"1":" and "}]]  ?
Run Code Online (Sandbox Code Playgroud)

1avg(g.score)查询中的索引.为了更好地理解为什么,尝试一下echo$queryAvgScore->getDql()之前getResult().

让我们回到一般问题:

SQL是:

SELECT AVG(SCORE) as AVG, COUNT(SCORE) as COUNT, IDPLAYER as PLAYER FROM SCORES GROUP BY IDPLAYER
Run Code Online (Sandbox Code Playgroud)

现在使用查询构建器:

$queryAvgScore = $queryScore->createQueryBuilder('g')
->select("avg(g.score) as score_avg, count(g.score) as score_count")
->where('g.idPlayer = :idPlayer')
->groupBy('g.idPlayer')
->setParameter('idPlayer', $id)
->getQuery();
Run Code Online (Sandbox Code Playgroud)

请注意,我已添加aliases,这比使用索引更好.

希望能帮助到你.