2009-09-22 67 views
0

当我运行下面的SQL 08查询时,出现tbrm_Article.ArticleID无效的错误,因为它不包含在聚合函数或GROUP BY子句中。有人可以帮我纠正这个SQL 08查询吗?

我知道这个问题是关系到: AVG(tbrm_Votes.True)当成真理, AVG(tbrm_Votes.False)为假, 和随后加入到tbrm_Votes表。

tbrm_votes表包含文章ID,真实数字列,假数字列。我正在尝试为给定的文章ID平均所有的真实和虚假的数字。文章ID可以在投票表中多次出现。

SELECT * FROM 

(

SELECT 
tbrm_Article.ArticleID, 
tbrm_Article.CountryID, 
tbrm_Article.CategoryID, 
tbrm_Article.Title, 
tbrm_Article.ArticleDetail, 
tbrm_Article.Source, 
tbrm_Article.ArticleDateTimeAdded, 
tbrm_Article.ViewCount, 
tbrm_Article.CommentCount, 
tbrm_CountryList.CountryName AS CountryName, 
tbrm_CountryList.CountryImage AS CountryImage, 
tbrm_CategoryList.CategoryName AS CategoryName, 
tbrm_CategoryList.CategoryImage AS CategoryImage, 
aspnet_Users.UserName AS UserName, 
AVG(tbrm_Votes.True) AS Truth, 
AVG(tbrm_Votes.False) AS False, 
ROW_NUMBER() OVER (ORDER BY tbrm_Article.ArticleDateTimeAdded DESC) AS RowRank 

FROM 

tbrm_Article INNER JOIN 
tbrm_CountryList ON tbrm_Article.CountryID = tbrm_CountryList.CountryID INNER JOIN 
tbrm_CategoryList ON tbrm_Article.CategoryID = tbrm_CategoryList.CategoryID INNER JOIN 
    aspnet_Users ON tbrm_Article.UserID = aspnet_Users.UserID INNER JOIN 
    tbrm_Votes ON tbrm_Article.ArticleID = tbrm_Votes.ArticleID 



) Article 
WHERE Article.RowRank > @PageIndex AND RowRank <= (@PageIndex + @PageSize) 
ORDER BY Article.ArticleDateTimeAdded DESC 

如果任何人能告诉我我要去哪里错我会很感激。由于

回答

3

如果您有需要说其他字段是如何结合的平均或其他aggreagate功能。

即在平均值的哪些行上进行计算。

这是通过group by命令完成的。这表示采取这些字段并对这些字段中具有相同值的行进行汇总。 (文件的Sybase说:“通过与骨料结合通常用于组指定选择查询的非聚集列。如何到组”)

因此,这里我们需要

group by 
    tbrm_Article.ArticleID, 
    tbrm_Article.CountryID, 
    tbrm_Article.CategoryID, 
    tbrm_Article.Title, 
    tbrm_Article.ArticleDetail, 
    tbrm_Article.Source, 
    tbrm_Article.ArticleDateTimeAdded, 
    tbrm_Article.ViewCount, 
    tbrm_Article.CommentCount, 
    tbrm_CountryList.CountryName 
    tbrm_CountryList.CountryImage 
    tbrm_CategoryList.CategoryName 
    tbrm_CategoryList.CategoryImage 
    aspnet_Users.UserName AS UserName 
0

与分析替换骨料:

AVG(tbrm_Votes.True) OVER() AS Truth 
AVG(tbrm_Votes.False) OVER() AS False 
+0

不会OVER了还需要一个分区子句? – Lazarus 2009-09-22 11:34:26

+0

没有。 – Quassnoi 2009-09-22 11:40:17

相关问题