次の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();
しかし、これは 2 つのループのために非常に非効率的であり、複数の著者による 100 万の記事があります。MySQLでこれを行う方法はありますか??
私はそれがその線に沿っているかもしれないと思う
SELECT sum(t.ArticleScore) / number of rows FROM Table t JOIN Authors a ON (t.author = a.author) WHERE t.author = a.author
しかし、行の合計と数を取得するために数学演算を行う方法がわかりません...