T-SQL - 每组平均值

时间:2018-01-29 22:51:02

标签: sql-server tsql ssms-2016

在SSMS中,我有一个Orders事实表,如下所示:

订单

ID   GroupKey    OrderID    Amount    DaysKey
----------------------------------------------
1    29          29422      23.93      14
2    29          29444     -13.28     101
3    29          29453      14.28     101
4    30          30194     100.00     103
5    32          30201     101.53      93
6    32          30291      50.00     121

我的Groups维度看起来像这样

Key    Name           StyleKey       AvgXX
-------------------------------------------
29     Blue           2              NULL
30     xyz            1              NULL
31     doesntmatter   2              NULL
32     Red            1              NULL

我有一个Days维度,如下所示:

    Key    Day
    ------------ 
    1      0
    2      1 
    3      4
    ...    ...
    1000   999

我有一个Style维度,如下所示:

风格

Key     Style
---------------
1       3.5
2       2

我要做的是填充[AvgXX]表格上的Groups列,其Amount更高的每个Style的平均值Day大于或等于100.

例如,Red组属于StyleKey 1Orders表中有2个条目用于StyleKey 1且大于100天(参见记录4和6)。因此,AvgXX组的Red列应为75.00。

Blue组(组29)的平均值应为1,因为1)Orders表中只有1个StyleKey 1组(参见第2行和第3行)和DayKey 101的总金额是1(并且第一行的日期小于100,因此应该忽略它。)

此外,我想要每个Style的平均值(目前只有2个样式)

通常,我会在可视化工具中进行这样的计算,但在这种情况下,遗憾的是,我不能。

2 个答案:

答案 0 :(得分:0)

也许这个

Select GroupKey
     , Average(Amount) OVER (Partition By GroupKey)
FROM Orders
WHERE Day >= 100
GROUP BY GroupKey

如果您想查看每个组密钥的平均值。

答案 1 :(得分:0)

select StyleKey, avg(Amount) 'awb' 
from groups 
join orders
  on orders.ID = groups.key 
 and DaysKey >= 101 

你将需要弄清楚如何按天计算总和 这不是编码服务