如何在SQL Server中执行sum(a)/ sum(b)查询?

时间:2012-02-14 22:13:51

标签: sql sql-server

如何在SQL Server中执行sum(a)/sum(b)查询?

我有a = sum(...)b = count(...)的子查询。我需要为主查询中的子查询计算所有记录的avg(all)。它是avg(all) = sum(a)/sum(b)。但SQL Server不允许此表达式。怎么计算呢?无法更改主查询中的记录数。

非常感谢您的帮助!

select
  sum(a)/sum(b) as avg_x
from
  (
   select
     sum(x) as a,
     count(x) as b
   from
     xyTable
   group by
     y
  )
group by
  <any_columns>

错误是:

  

无法对表达式执行聚合函数   包含聚合或子查询。

3 个答案:

答案 0 :(得分:2)

为什么不

select
 avg(x) as avg_x
from
 xyTable
group by
 y

答案 1 :(得分:0)

正如@Chris所说 - 如果您发布了代表性查询,这将有所帮助。

除此之外,我会指出你可以通过用表变量/ cte替换你的样本中的子查询来避免你得到的具体错误/你有什么包含当前子查询的结果。

即:

---create the table variable @myTable
---then SELECT sum(a)/sum(b) from @myTable...

答案 2 :(得分:0)

MSSQL可以接受

sum(a)/sum(b)。问题出在查询的另一部分:sum(min(a))