由于分组依据,每日平均值无法正确计算

缺口

我有以下 SQL,我试图在其中获得总计数的一个月内的每日平均值。

SELECT A.BUSINESS_UNIT, A.INV_ITEM_ID, C.MFG_ID, C.MFG_ITM_ID, 
 A.ADJUST_TYPE, A.QTY_BASE, A.UNIT_MEASURE_STD,
 A.DT_TIMESTAMP, B.DESCR254_MIXED, A.TRANSACTION_GROUP, 
 (CONVERT(CHAR(10),A.TRANSACTION_DATE,121)), A.DEPTID, B.PRICE_LIST, 
 A.DESTIN_GL_BU,  A.QTY_BASE* B.PRICE_LIST, (COUNT(*) * 1.0 / 31 ) AS 'Daily 
 Average'
FROM PS_TRANSACTION_INV A, (PS_PURCH_ITEM_ATTR B LEFT OUTER JOIN  
 PS_ITEM_MFG C ON  B.SETID = C.SETID AND B.INV_ITEM_ID = C.INV_ITEM_ID ), 
 PS_CM_ACCTG_DIST_D D 
WHERE ( A.BUSINESS_UNIT = '11MMS' 
 AND A.INV_ITEM_ID = B.INV_ITEM_ID 
 AND C.PREFERRED_MFG = 'Y' 
 AND A.TRANSACTION_DATE >= '05-01-2018' 
 AND A.TRANSACTION_DATE <= '05-31-2018' 
 AND A.BUSINESS_UNIT = D.BUSINESS_UNIT 
 AND A.INV_ITEM_ID = D.INV_ITEM_ID 
 AND D.TRANSACTION_GROUP = A.TRANSACTION_GROUP 
 AND A.INV_ITEM_ID = '1')
GROUP BY A.BUSINESS_UNIT, A.INV_ITEM_ID, C.MFG_ID, C.MFG_ITM_ID, 
 A.ADJUST_TYPE, A.QTY_BASE, A.UNIT_MEASURE_STD,
 A.DT_TIMESTAMP, B.DESCR254_MIXED, A.TRANSACTION_GROUP, 
 (CONVERT(CHAR(10),A.TRANSACTION_DATE,121)), A.DEPTID, B.PRICE_LIST, 
 A.DESTIN_GL_BU,  A.QTY_BASE* B.PRICE_LIST

使用上面运行的数据,我得到 36 行(我的计数)的输出,我将其除以 31(天),并期望每日平均值为 1.161,但是我的每日平均值的每一行输出为 0.032258(我确定为 1.16 / 36)。非聚合列在 Group By 中,但以某种方式扭曲了每日平均值。

在此处输入图片说明

如果我只对计算出的平均值运行查询,(COUNT(*) * 1.0 / 31 ) AS 'Daily Average'那么我会得到正确的每日平均值 1.161,所以我知道它与分组依据有关。提前致谢!

编辑:

运行此查询会产生 1.161 的正确结果,只是当我将它添加到上面的查询时, Group By 是我的结果不正确。这就是我试图在主查询中模仿的内容。SELECT (COUNT(*) * 1.0 / 31 ) AS 'Daily Average' FROM PS_TRANSACTION_INV A, (PS_PURCH_ITEM_ATTR B LEFT OUTER JOIN
PS_ITEM_MFG C ON B.SETID = C.SETID AND B.INV_ITEM_ID = C.INV_ITEM_ID ), PS_CM_ACCTG_DIST_D D WHERE ( A.BUSINESS_UNIT = '11MMS' AND A.INV_ITEM_ID = B.INV_ITEM_ID AND C.PREFERRED_MFG = 'Y' AND A.TRANSACTION_DATE >= '05-01-2018' AND A.TRANSACTION_DATE <= '05-31-2018' AND A.BUSINESS_UNIT = D.BUSINESS_UNIT AND A.INV_ITEM_ID = D.INV_ITEM_ID AND D.TRANSACTION_GROUP = A.TRANSACTION_GROUP AND A.INV_ITEM_ID = '1')

卡尔达萨

当您按所有列添加 group 时,count 的结果将始终为 1,因此您得到的结果。

执行您要求的最简单方法是将第二个查询添加为主查询的子查询,届时您可能会丢失该组,如下所示:

SELECT A.BUSINESS_UNIT, A.INV_ITEM_ID, C.MFG_ID, C.MFG_ITM_ID, 
 A.ADJUST_TYPE, A.QTY_BASE, A.UNIT_MEASURE_STD,
 A.DT_TIMESTAMP, B.DESCR254_MIXED, A.TRANSACTION_GROUP, 
 (CONVERT(CHAR(10),A.TRANSACTION_DATE,121)), A.DEPTID, B.PRICE_LIST, 
 A.DESTIN_GL_BU,  A.QTY_BASE* B.PRICE_LIST,  
 (SELECT COUNT(*) * 1.0 / 31
     FROM PS_TRANSACTION_INV A, (PS_PURCH_ITEM_ATTR B LEFT OUTER JOIN
      PS_ITEM_MFG C ON  B.SETID = C.SETID AND B.INV_ITEM_ID = C.INV_ITEM_ID ), 
      PS_CM_ACCTG_DIST_D D 
     WHERE ( A.BUSINESS_UNIT = '11MMS' 
      AND A.INV_ITEM_ID = B.INV_ITEM_ID 
      AND C.PREFERRED_MFG = 'Y' 
      AND A.TRANSACTION_DATE >= '05-01-2018' 
      AND A.TRANSACTION_DATE <= '05-31-2018' 
      AND A.BUSINESS_UNIT = D.BUSINESS_UNIT 
      AND A.INV_ITEM_ID = D.INV_ITEM_ID 
      AND D.TRANSACTION_GROUP = A.TRANSACTION_GROUP 
      AND A.INV_ITEM_ID = '1') 
 )  AS 'Daily Average'
FROM PS_TRANSACTION_INV A, (PS_PURCH_ITEM_ATTR B LEFT OUTER JOIN  
 PS_ITEM_MFG C ON  B.SETID = C.SETID AND B.INV_ITEM_ID = C.INV_ITEM_ID ), 
 PS_CM_ACCTG_DIST_D D 
WHERE ( A.BUSINESS_UNIT = '11MMS' 
 AND A.INV_ITEM_ID = B.INV_ITEM_ID 
 AND C.PREFERRED_MFG = 'Y' 
 AND A.TRANSACTION_DATE >= '05-01-2018' 
 AND A.TRANSACTION_DATE <= '05-31-2018' 
 AND A.BUSINESS_UNIT = D.BUSINESS_UNIT 
 AND A.INV_ITEM_ID = D.INV_ITEM_ID 
 AND D.TRANSACTION_GROUP = A.TRANSACTION_GROUP 
 AND A.INV_ITEM_ID = '1')

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无法计算正确的平均值

来自分类Dev

分组依据之和的平均值

来自分类Dev

为什么在SQL Server中计算移动平均值时无法正确分组

来自分类Dev

phpMyAdmin-计算每日平均值

来自分类Dev

用熊猫计算每日平均值

来自分类Dev

熊猫:如何计算分组平均值

来自分类Dev

选择查询中的平均值、计数、分组依据

来自分类Dev

如何从小时值计算每日平均值?

来自分类Dev

如何计算15年的每日平均值?

来自分类Dev

计算PD系列中的每日平均值

来自分类Dev

计算Python中数组的每日平均值

来自分类Dev

如何按季度计算每日平均值

来自分类Dev

熊猫-无法计算移动平均值

来自分类Dev

分组并计算平均值并计算熊猫的大小

来自分类Dev

计算平均值?

来自分类Dev

将列表按给定元素分组并计算平均值

来自分类Dev

根据时间间隔分组计算平均值

来自分类Dev

如何对条目进行分组,计算频率和平均值

来自分类Dev

用Javascript计算分组后的平均值

来自分类Dev

分组滚动平均值

来自分类Dev

SQL 分组平均值

来自分类Dev

通过将多列分组来创建每日平均值

来自分类Dev

如何正确使用指针计算平均值

来自分类Dev

在没有分组依据的情况下获取每天/小时的平均值

来自分类Dev

熊猫:从多个分组依据中获取先前日期时间的平均值

来自分类Dev

在没有分组依据的情况下获取每天/小时的平均值

来自分类Dev

SQL Server-分组依据,平均值和百分数

来自分类Dev

使用熊猫从不规则时间序列计算每日平均值

来自分类Dev

xarray:通过*本地*月度平均值计算每日异常的时间序列