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