如果使用SUM,如何计算平均值

时间:2018-05-11 20:48:51

标签: sql tsql sql-server-2012

我正在尝试编写一个查询,该查询使用所有百分比行返回总平均百分比。

我在使用AVG函数计算总平均百分比时遇到问题,因为传递的字段使用另一个函数SUM来计算每行的百分比。

示例:

SELECT 
-- Row Percent Value
CONVERT(DECIMAL(5,4), 1.0 * SUM([col1]+[col2]+[col3]+[col4]+[col5]) / SUM([total])) AS 'Percent Row',
-- total rows average percent -- This part does not work
AVG(CONVERT(DECIMAL(5,4), 1.0 * SUM(CASE WHEN [col0] = 'Y' THEN [total] ELSE 0 END) / SUM([total])))

我收到一条错误消息:

Cannot perform an aggregate function on an expression containing an aggregate or a subquery.

我很感激有关如何解决这个问题的任何帮助,我们非常感谢任何见解。

更新

这是我当前的查询(没有平均值)

SELECT  
'Totals', 
CAST(CAST(SUM(CASE WHEN Gender = 'F' THEN Total ELSE 0 END) AS DECIMAL) / CAST(SUM(Total) AS DECIMAL) AS FLOAT) AS 'OA F' 
FROM RecordCount rc WITH(NOLOCK)
INNER JOIN Record r WITH(NOLOCK) 
    ON r.RecordId = rc.RecordId
WHERE 
    (rc.RecordId IN ('00001','00002'));

平均值需要作为另一列包含在“OA F”之后,这是获得平均值的查询,我不确定如何在现有查询中正确输入,主要是因为它首先使用SUM功能,然后是AVG:

SELECT AVG(o.[Avg%]) 
FROM 
(
    SELECT CAST(SUM(i.bnh + i.aa + i.[pi] + i.h + i.tmr)) AS DECIMAL)/ SUM(i.total) as [Avg%]
    FROM rc i
) AS o

任何帮助都非常感激。

1 个答案:

答案 0 :(得分:1)

把它提升到一个水平:

select [percent row], avg(a) from(
SELECT 
CONVERT(DECIMAL(5,4), 1.0 * SUM([col1]+[col2]+[col3]+[col4]+[col5]) / SUM([total])) AS 'Percent Row', 
CONVERT(DECIMAL(5,4), 1.0 * SUM(CASE WHEN [col0] = 'Y' THEN [total] ELSE 0 END) / SUM([total])) a
from yourtable)b
group by [percent row]