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
子查詢
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 2012-04-25 18:24:32
你不能,因爲在SELECT語句完成之前,別名不會存在。你試圖做什麼更大的背景下,什麼是你的RDBMS(不同的解決方案可用)。假設'score'是一個int,你是否接受一個double/float值的結果(即 - 是否允許數學重構平均語句的寫法)? – 2012-04-25 18:25:19
如何獲得單個數字的AVG?你實際上是添加了所有的分數,並在其上應用AVG? – Habib 2012-04-25 18:25:55