SQL C # Как получить каждый фрагмент данных с определенным атрибутом

1

Хорошо, поэтому у меня есть таблица отзывов, каждая из которых имеет рейтинг и идентификатор 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
    Вам не нужен ArrayList для всего, вместо этого используйте int.
Теги:

2 ответа

1
Лучший ответ

Как намекнул Лян, если вы хотите получить сумму рейтингов, вы можете изменить свой 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");

Вот информация об агрегатных функциях и параметризованных запросах.

  • 0
    Извините, что сказал «Я также хотел бы добавить» дважды. Кажется, это обычная вещь, которую я говорю.
0

основанный на моем понимании, я думаю, что этот SQL - это то, что вам нужно:

sql = "select sum(Rating) from Reviews where MovieID = '" + movieId + "';";

Ещё вопросы

Сообщество Overcoder
Наверх
Меню