Может ли кто-нибудь помочь мне исправить этот запрос SQL 08? - PullRequest
0 голосов
/ 22 сентября 2009

Когда я запускаю приведенный ниже запрос SQL 08, я получаю сообщение об ошибке, что tbrm_Article.ArticleID является недопустимым, поскольку он не содержится в статистической функции или предложении GROUP BY

Я знаю, что проблема связана с: AVG (tbrm_Votes.True) А.С. Правда, AVG (tbrm_Votes.False) AS False, и последующее соединение с таблицей tbrm_Votes.

таблица tbrm_votes содержит идентификатор статьи, столбец истинного числа, столбец ложного числа. Я пытаюсь усреднить все истинные и ложные числа для данного идентификатора статьи. Идентификатор статьи может появляться в таблице голосов несколько раз.

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

Если кто-нибудь покажет мне, где я иду не так, я был бы признателен. Спасибо

Ответы [ 2 ]

3 голосов
/ 22 сентября 2009

Если у вас есть функции avg или другие агрегированные функции, вы должны указать, как комбинируются другие поля.

т.е. по каким строкам рассчитывается среднее значение.

Это делается группой по команде. Это говорит: возьмите эти поля и сделайте сводку по строкам, имеющим одинаковое значение в этих полях. (В документе Sybase говорится, что 'group by обычно используется в сочетании с агрегатами, чтобы указать, как группировать неагрегированные столбцы запроса select.')

Таким образом, здесь нам нужно

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 голосов
/ 22 сентября 2009

Замените агрегаты аналитикой:

AVG(tbrm_Votes.True) OVER() AS Truth
AVG(tbrm_Votes.False) OVER() AS False
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...