满足where子句时的平均值

时间:2012-09-19 13:41:57

标签: sql

我想找到满足标准的字段的平均数量。它嵌入在一个大表中,但我想在那里使用这个平均字段,而不是在单独的表中进行。

这是我到目前为止所做的:

Select....
Avg( (currbal) where (select * from table 
                       where ament2 in ('r1','r2'))
From table 

3 个答案:

答案 0 :(得分:2)

如果你想AVG只有一个查询的子集使用case when ... then来替换非匹配行中的值为null,因为avg()会忽略空值。

Select id,
       sum(something) SomethingSummed,
       avg(case when ament2 in ('r1','r2') then currbal end) CurrbalAveragedForR1R2
  From [table]
 group by id

答案 1 :(得分:1)

您可以在AVG子句中的表引用内放置要嵌入的所有其他总和到FROM语句中。类似的东西:

SELECT AVG(currbal)
FROM
(
    SELECT * -- other sums
    FROM table
    WHERE ament2 IN ('r1','r2')
) t

答案 2 :(得分:1)

您可以在选择列表中写一个完整的子选择:

SELECT ...,
       (SELECT AVG(Currbal) FROM Table WHERE ament2 IN ('r1', 'r2')) AS avg_currbal,
       ...
  FROM ...

这是否能完全符合您的要求取决于许多事情。您可能需要将其转换为相关子查询;假设'ament2'在表中,它目前不是相关的子查询。