Хорошо, поэтому у меня есть таблица отзывов, каждая из которых имеет рейтинг и идентификатор 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;
Любое понимание было бы оценено.
Как намекнул Лян, если вы хотите получить сумму рейтингов, вы можете изменить свой 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");
Вот информация об агрегатных функциях и параметризованных запросах.
основанный на моем понимании, я думаю, что этот SQL - это то, что вам нужно:
sql = "select sum(Rating) from Reviews where MovieID = '" + movieId + "';";