我有以下 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
但我不知道如何进行数学运算来获得总和和行数......