【问题标题】:MS SQL - sum then divide by countMS SQL - 求和然后除以计数
【发布时间】:2015-10-31 12:02:53
【问题描述】:

我编写了以下SQL 查询,它提供total 每位员工的天数。

SELECT DISTINCT
  ([Entered_By]),
  SUM(ALL DATEDIFF(DAY, Time_End_UTC, Date_Entered_UTC)) OVER (PARTITION BY entered_by) AS Days

FROM [dbo].[Time_Entry]
WHERE date_start BETWEEN '06-01-2015' AND '06-30-2015'
AND DATEDIFF(DAY, Time_End_UTC, Date_Entered_UTC) > 2

我还可以将“sum”更改为“count”(并删除“all”)并获取记录总数。

但是我需要以下之一:

  1. 一列包含 sum,另一列包含 count(请记住,我无法写入此数据库)或
  2. 总和乘以计数的列

当我尝试同时拥有(option 1) 时,我遇到了问题。而且我不知道如何让multiplication (option 2) 工作。

感谢您的帮助。

【问题讨论】:

  • 您需要将总和除以计数(如您的标题中所述)还是乘以(如您的文本中所述)?

标签: sql-server count sum partition


【解决方案1】:

对于选项 2,您可以

SELECT COUNT(ATTRIB) * SUM(ATTRIB) FROM TABLE;

【讨论】:

  • 我确实在我的原始代码中尝试过这个,但没有成功,但使用其他 cmets,我得到了它的工作。感谢您的意见。
【解决方案2】:

我觉得使用GROUP BY 查询而不是窗口化sum 会更容易实现:

Select [Entered_By]
,sum(datediff(Day, Time_End_UTC, Date_Entered_UTC))
,count(*) --count of all records in the group, which you could also multiply by the sum if you prefer option 2

From [dbo].[Time_Entry]
where date_start between '06-01-2015' and '06-30-2015'
and datediff(DAY, Time_End_UTC, Date_Entered_UTC) >2
GROUP BY [Entered_By] --this takes care of the distinctness of [Entered_By] and partitioning you had in your original query

【讨论】:

  • 谢谢。那太棒了!我最初确实尝试过这个,但必须在某个地方的修订中搞砸了。你帮了大忙 - 再次感谢。
猜你喜欢
  • 1970-01-01
  • 2022-08-08
  • 1970-01-01
  • 2017-01-30
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多