好的,所以我有一张评论表,每张评论都有一个评级和一部关于哪部电影被评级的movieID。我为一个movieID添加了多个评级,并希望获得评分的平均值。现在我只是试图计算评分的总和,但遗憾的是我只想从我的数据库中得到第一个输入的评分。我试图让所有评级将它们存储到ArrayList中并计算总数,这里是代码...
if (movieId > -1) { //if movie id was found
sql = "select Rating from Reviews where MovieID = '" + movieId + "';";
result.Close();
dbCmd.Connection = dbConn;
dbCmd.CommandText = sql;
result = dbCmd.ExecuteReader();
ArrayList total = new ArrayList();
int i = 0;
while (result.Read())
{
try
{
total.Add((int)result.GetInt16(i));
}
catch (System.IndexOutOfRangeException)
{
MessageBox.Show("Looping, total count: " + total.Count);
break;
}
MessageBox.Show("Looping, total count: " + total.Count);
i++;
}
if (total.Count > 0) //if total was calculated
{
//double avg = (double)result;
int computedTotal = 0;
foreach(int j in total)
{
computedTotal += j;
}
msg = "AVG Reviews successfully computed total result = " + computedTotal;
任何见解都将受到赞赏。
答案 0 :(得分:1)
正如Liang暗示的那样,如果你想要评级的总和,你可以将你的SQL查询改为:
SELECT SUM(rating) AS totalRating FROM reviews WHERE movieid = 'What you want here'
这样,您可以只存储返回的int,而不必担心其他任何事情。我还想补充一点,如果你想获得平均值,你可以用AVG()聚合函数替换它,如下所示:
SELECT AVG(rating) AS averageRating FROM reviews WHERE movieid = 'What you want here'
我还想补充一点,我建议您使用参数化查询,而不是像这样连接字符串。我认为你应该改变前几行:
dbCmd.Connection = dbConn;
dbCmd.CommandText = "SELECT AVG(rating) AS averageRating FROM reviews WHERE movieID = @movieid";
dbCmd.CommandText.Parameters.AddWithValue("@movieid", movieId");
以下是有关aggregate功能和parameterized查询的信息。
答案 1 :(得分:0)
根据我的理解,我认为这是你需要的SQL:
sql = "select sum(Rating) from Reviews where MovieID = '" + movieId + "';";