我正在为我的客户编写一个存储过程来填充一些将在稍后用于生成SSRS报告的表。一些数据基于特定的库存公式,这些公式在客户的每个季度数据上运行(由客户发送给他们)。通过将这些结果与来自其他类似大小的客户端的结果进行比较来生成数据的另一部分。他们希望在报告中跟踪的事项之一是该特定比较组的公式结果的前25%的平均值。
为了更好地了解它,想象一下我在临时表中的以下字段:
FormulaID int
Value decimal (18,6)
我想执行以下操作:给定特定FormulaID
返回Value
前25%的平均值。
我知道如何在SQL中取平均值,但我不知道如何对照特定组的前25%。
我该如何撰写此查询?
答案 0 :(得分:11)
我想你可以做这样的事......
SELECT AVG(Q.ColA) Avg25Prec
FROM (
SELECT TOP 25 Percent ColA
FROM Table_Name
ORDER BY SomeCOlumn
) Q
答案 1 :(得分:1)
根据上面的表格,这是我的所作所为:
select AVG(t.Value)
from (select top 25 percent Value
from @TempGroupTable
where FormulaID = @PassedInFormulaID
order by Value desc) as t
desc
必须,因为percent
命令实际上不会进行比较。它只是简单地获取前x个记录,x等于它查询的记录数的25%。因此,order by Value desc
行将获取具有最高Value
的前25%记录,然后将该信息发送到平均值。
作为所有这一切的旁注,这也意味着如果你想要取代底部 25%,或者你的公式结果就像高尔夫得分(即最低是最好的) ),你需要做的就是删除desc
部分,你会很高兴。