计算不同子组的数据平均值

时间:2017-06-21 16:15:13

标签: sql .net sql-server vb.net

我还没有代码作为示例,只是想知道最好的方法。

我正在使用vb2010并且有一个数据表,我需要显示不同子组的平均值。

Example

我需要计算所有名称的平均值,然后计算组的平均值(状态)

这只是一个例子,我可以有很多不同的状态。

数据按日期范围从SQL Server加载到VB2010中的数据适配器,我目前使用datagridview显示所有行。

数据集中有很多其他列。

不确定获得所需结果的最佳方法,帮助赞赏。

1 个答案:

答案 0 :(得分:1)

对于第一个分组,您应该可以使用:

Select
   [Name],
   [Status],
   avg(Score) over (partition by [Status], [Name] order by (select null))
from table
group by 
   [Name],
   [Status]

总平均值:

avg(Score) over (partition by [Status] order by (select null))

您还应该能够使用条件聚合来完成此任务。

avg(case when [Name] = 'Fred' and [Status] = 'Accepted' then Score end) as FredAcceptedAvg,
avg(case when [Name] = 'Ian' and [Status] = 'Accepted' then Score end) as FredAcceptedAvg,
avg(case when [Name] = 'Fred' and [Status] = 'Declined' then Score end) as FredDeclinedAvg,
avg(case when [Name] = 'Ian' and [Status] = 'Declined' then Score end) as IanDeclinedAvg,
avg(case when [Status] = 'Declined' then Score end) as DeclinedAvg,
avg(case when [Status] = 'Accepted' then Score end) as AcceptedAvg

然后你可以随时随地显示它。