我有一列中保存的一门课程的等级和另一列保存当然比一个表,然后我想计算的课程平均有比我写的这些代码,但我面对错误,请帮助我AVG上多列
select SUM((grade * ratio)/SUM(ratio)) as averageOfCourses
from myTable
我有一列中保存的一门课程的等级和另一列保存当然比一个表,然后我想计算的课程平均有比我写的这些代码,但我面对错误,请帮助我AVG上多列
select SUM((grade * ratio)/SUM(ratio)) as averageOfCourses
from myTable
您的问题可能是错位的括号。
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要求,但并没有此查询任何贡献)
在这种情况下,我甚至不确定它会给出不同的答案。
是的,这是...什么有趣的问题?非常感谢,我在此考虑了30分钟:D – Ehsan 2012-03-02 06:58:16
尝试
select (SUM(grade * ratio)/SUM(ratio)) as averageOfCourses from myTable
declare @sum float = (select sum(ratio) from myTable)
select sum(grade * ratio/@sum) as averageOfCourses from myTable
这很有效,但双重操作实际上并不必要,甚至可能比单一语句效率稍差。 – 2012-03-02 07:13:03
我刚刚运行了所有查询以查看执行计划和结果。 SELECT SUM(grade * ratio)/ SUM(ratio)给出与我的查询相同的结果和执行计划。您的替代查询会提供不同的结果,并且需要4倍的时间才能执行。 – Phil 2012-03-02 07:25:35
什么是错误.............. – 2012-03-02 06:53:35