SQL C#如何获取具有特定属性的每个数据

时间:2014-11-10 01:38:54

标签: c# sql

好的,所以我有一张评论表,每张评论都有一个评级和一部关于哪部电影被评级的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;

任何见解都将受到赞赏。

2 个答案:

答案 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 + "';";