AVG на нескольких столбцах - PullRequest
1 голос
/ 02 марта 2012

У меня есть таблица, в которой в одном столбце сохраняется оценка курса, а в другом столбце сохраняется соотношение этого курса, затем я хочу рассчитать среднее значение курсов с соотношением, я пишу этот код, но сталкиваюсь с ошибкой, пожалуйста, помогите мне

select SUM((grade * ratio) / SUM(ratio)) as averageOfCourses
from myTable

Ответы [ 3 ]

2 голосов
/ 02 марта 2012

попробуй

select (SUM(grade * ratio) / SUM(ratio)) as averageOfCourses from myTable 
1 голос
/ 02 марта 2012
declare @sum float = (select sum(ratio) from myTable)
select sum( grade * ratio / @sum ) as averageOfCourses from myTable
1 голос
/ 02 марта 2012

Ваша проблема, вероятно, в неуместных скобках.

SELECT SUM(grade * ratio) / SUM(ratio) AS averageOfCourses
  FROM myTable

Если вы действительно хотите сделать СУММУ значений, разделенных на СУММУ, то вам придется работать намного усерднее;Вы не можете делать агрегаты напрямую.

Чтобы сделать то, что вы написали, вам нужно переписать его как:

SELECT SUM((grade * ratio) / sum_ratio) AS averageOfCourses
  FROM (SELECT grade, ratio, SUM(ratio) AS sum_ratio
          FROM myTable
         GROUP BY grade, ratio) AS precalculation

(окончательный AS требуется стандартомSQL, но ничего не вносит в этот запрос.)

В этом контексте я даже не уверен, что он дает другой ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...