AVG()
является агрегатной функцией, которая принимает значения от нескольких строк и дает их среднее значение.
Вы пытаетесь усмотреть 3 столбцы.
Я ваш конкретный случай, это можно сделать с помощью алгебры.
SELECT
(SUM(score) * .3) As score_a,
(SUM(score) * .6) As score_b,
(SUM(score) * .8) As score_c,
(SUM(score) * ((0.3 + 0.6 + .8)/3.0)) As score_avg
FROM
score_table
В более обобщенном случае, вы ограничены тем, что вы не можете ссылаться на столбец, который только что определили в другой колонке ...
SELECT
a + 1 AS inc_a,
inc_a * 2 AS this_is_invalid
FROM
your_table
Вы хотите или должны повторяйте себе, или использовать вспомогательный запрос ...
повторения
SELECT
(SUM(score) * .3) As score_a,
(SUM(score) * .6) As score_b,
(SUM(score) * .8) As score_c,
((SUM(score) * .3) + (SUM(score) * .3) + (SUM(score) * .3))/3.0 As score_avg
FROM
score_table
Sub Запрос
SELECT
score_a,
score_b,
score_c,
(score_a + score_b + score_c)/3.0 AS score_avg
FROM
(
SELECT
(SUM(score) * .3) As score_a,
(SUM(score) * .6) As score_b,
(SUM(score) * .8) As score_c
FROM
score_table
)
AS data
К сожалению, я на самом деле исправил мой код, указанный выше. Я все равно получаю ту же ошибку. – dido
Вы не можете, потому что псевдоним не будет существовать до завершения инструкции SELECT. Каков более широкий контекст, в котором вы пытаетесь это сделать, и какова ваша RDBMS (доступны различные решения). Предполагая, что 'score' является int, вы принимаете результат как значение double/float (т. Е. Было бы допустимо математически реорганизовать способ записи среднего оператора)? –
как вы получите AVG одного номера? вы на самом деле добавляете все оценки и применяете AVG? – Habib