【问题标题】:Getting Average number based on UserID根据 UserID 获取平均数
【发布时间】:2022-01-28 03:31:44
【问题描述】:

这是对上一篇文章的跟进。我试图获得每个人在一个月内完成所有交易的平均天数。每个人每个月有 200 多笔交易,我们只是从开放日期到发票日期,所以我们不必担心下个月发生的交易。

我能够使用 CASE 语句将负数的任何内容更改为 0。结果是每笔交易都会出现,所以现在我只是尝试获取每个人的数字,取平均值,然后按用户显示名字。

这是我到目前为止所得到的

SELECT [Transaction], [UserID], 
       CASE WHEN DATEDIFF (day, [ShippingDt], [InvoiceDate]) < 0 
         THEN 0 
         ELSE DATEDIFF (day, [ShippingDt], [InvoiceDate])
       END AS DTC
FROM Transaction.table
WHERE [ShippingDt] >= '20211101' AND [ShippingDt] < '20211201'
  AND [InvoiceDate] IS NOT NULL

【问题讨论】:

标签: sql sql-server tsql


【解决方案1】:

嗯,你说你想要一个平均值,所以AVG 似乎是合适的,并按UserID 分组:

SELECT [UserID], 
    AVG(CASE WHEN DATEDIFF(day, [ShippingDt], [InvoiceDate]) < 0 
         THEN 0 
         ELSE DATEDIFF(day, [ShippingDt], [InvoiceDate])
       END) AS DTC
FROM Transaction.table
WHERE [ShippingDt] >= '20211101' AND [ShippingDt] < '20211201'
  AND [InvoiceDate] IS NOT NULL 
GROUP BY [UserID];

【讨论】:

  • 谢谢!我试图使用 AVG 并且丢失了我应该删除 ) 以关闭它以及 GROUP BY 的位置。
  • @Mikeydipow 当然。你可能想在Aggregate Functions 上做一些阅读。如果您认为这是一个可以接受的解决方案,也可以考虑接受答案。
  • 我已经接受了答案,非常感谢您的帮助!我可以让您了解我如何使用 AVG 乐趣但显示小数吗?我使用 CAST 来显示小数,但它只将它们显示为 0 而不是实际数字。
  • @Mikeydipow 看起来AVG 的返回类型取决于你给它的表达式。所以你必须使用AVG(CAST(CASE ... END AS decimal(19,4))) AS DTC
猜你喜欢
  • 2014-08-27
  • 2022-06-29
  • 2016-09-08
  • 1970-01-01
  • 2022-01-25
  • 2013-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多