【问题标题】:Add additional number manually in SQL aggregate function在 SQL 聚合函数中手动添加附加数字
【发布时间】:2021-01-06 03:02:37
【问题描述】:
TempC
----
32
27
36
30
SELECT STDEV(TempC) 
FROM myTable 
WHERE Time BETWEEN dateadd(HOUR, -4, GETDATE()) AND GETDATE()

在上表中,我可以使用STDEV() 函数轻松获得标准差,但现在我想在计算其标准差之前将一个额外的数字添加到表中。额外的数字不是来自数据库,而是在 SQL 查询中手动编写的。

TempC
----
32
27
36
30
37 (manually added number)

我怎样才能有效地做到这一点?

【问题讨论】:

  • 使用基于其他聚合的标准差公式。
  • 试试(sqrt((count(TempC)+1) * (sum(TempC * TempC) + C * C) - (sum(TempC) + C) * (sum(TempC) + C)) / count(TempC))
  • 使用UNION ALL
  • 查看快速计算方法。 en.m.wikipedia.org/wiki/… 是的,您可以将union all 用于单个组。如果您不知道 outout 中有多少行,那么它会变得更加复杂。

标签: sql-server sql-server-2012


【解决方案1】:

使用UNION ALL手动添加需要的值

SELECT STDEV(TempC) 
FROM   (
           SELECT TempC FROM myTable
           UNION ALL
           SELECT TempC = 37
       ) T

【讨论】:

  • 您的解决方案完美运行,也非常简单。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-04
相关资源
最近更新 更多