1

我有以下 MySQL 表

ArticleId | AuthorId | Author | ArticleScore
----------|----------|--------|-------------
0         |0         |Albert  |0.2
0         |1         |Bob     |0.2
0         |2         |Chris   |0.2
1         |0         |Albert  |0.5
1         |1         |Chris   |0.5
2         |0         |Chris   |0.7

我想得到下表,其中 AuthorScore 是作者写的所有文章的 articleScore 的总和除以文章的数量。

Table Authors

Author | AuthorScore
-------|------------
Albert | (0.2 + 0.5)/2
Bob    | 0.2
Chris  | (0.2 + 0.5 + 0.7)/3

如何用mysql语言获取上表?我可以在java中编写一个循环:

for (String author: authorList){
    double sum = 0.0;
    double autScore =0.0;
    List<Double> results = em.createQuery("SELECT ArticleScore FROM Table WHERE Author ='" + author +"'").getResultList();

    for (double artScore: results){
        sum += artScore;
    }

    autScore = sum / results.size();
    Table t = new Table();
    t.setAuthor(author);
    t.setAuthorScore(autScore);
    em.persist();
}
em.flush();

但是由于有两个循环,这非常低效,并且有一百万篇文章有多个作者。有什么方法可以在 MySQL 中完成吗?

我想可能是这样的

SELECT sum(t.ArticleScore) / number of rows FROM Table t JOIN Authors a ON (t.author = a.author) WHERE  t.author = a.author

但我不知道如何进行数学运算来获得总和和行数......

4

1 回答 1

1

avg您应该使用聚合函数完全在 SQL 中执行此操作:

select author, avg(articlescore) from your_first_table group by author;

然后,您可以根据需要使用结果 - 正如您所提到的,将它们插入到另一个表中,但是我建议您只重新运行这个简单的查询或创建一个视图。

于 2013-08-21T03:23:09.743 回答