我正在尝试编写一个查询,该查询使用所有百分比行返回总平均百分比。
我在使用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
任何帮助都非常感激。
答案 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]