【问题标题】:T-SQL - Average Per GroupT-SQL - 每组平均值
【发布时间】:2018-01-29 22:51:02
【问题描述】:

在 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

我要做的是用每个Style 的平均Amount 填充Groups 表上的[AvgXX] 列,其中Day 大于或等于100。

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

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

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

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

【问题讨论】:

  • 蓝色的平均值应该是 0.5 而不是 1?
  • 不,101是同一天,所以只能除以1天
  • 您这里似乎有一堆标准。也许如果您提供您尝试的代码,我们可以帮助您拨入,但这不是很清楚需要什么。

标签: sql-server tsql ssms-2016


【解决方案1】:

也许是这样

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

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

【讨论】:

    【解决方案2】:
    select StyleKey, avg(Amount) 'awb' 
    from groups 
    join orders
      on orders.ID = groups.key 
     and DaysKey >= 101 
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多