【问题标题】:sql server aggregate float valuessql server 聚合浮点值
【发布时间】:2011-07-09 09:29:45
【问题描述】:

你好 我在汇总浮点值时得到了不同的结果。查询如下

declare @cy datetime
set @d = '12/01/2010'

select SUM(total) from (
select sum(amt1) as total from table1
where date1 < @d  
union all
select sum(amt1) as total from table1
where date1 >= @d
) as a 

amt1 的数据类型是浮点数。

所以查询只是聚合表 table1 中的列总计。 现在,如果我将变量 @d 更改为“2010 年 1 月 1 日”,我会得到不同的金额。 我在不同的时间范围内不断获得不同的金额 为什么会这样。我希望每次运行与下面的查询匹配的查询的结果都是相同的 从 table1 中选择 sum(amt1)

谢谢 本

更新:我正在使用联合所有。感谢您指出。它仍然给我不同的结果

【问题讨论】:

  • 我正在使用 union all(错过了我发布的查询中的那个),但它仍然返回不同的值
  • 您在第一个查询中求和 amt1 和在第二个查询中求和 amt 是不是错字?否则你很可能会期待不同的结果。
  • 您是否尝试过将浮点数转换为更高的精度float(24) 我想?
  • 如果你尝试转换为精确的数字类型,你仍然会得到差异吗?
  • 好吧,我想我们可能会回到 the order in which the numbers are added makes a difference 的想法,但这比我在测试中设法获得的差异要大得多。涉及多少行?还有什么是最大和最小的正数和最大和最小的负数?

标签: sql-server-2008 aggregation


【解决方案1】:

我怀疑您使用的是UNION,因为您的查询中实际上有两个不同的表,例如table1table2。在这种情况下,您不应该期望日期更改时总和是相同的。

更新:我刚刚注意到您在一个查询中选择 amt 而在另一个查询中选择 amt1,因此没有理由期望总和与日期更改相同.

【讨论】:

  • 我认为他实际上是在按给定日期拆分表中的记录(即之前的所有记录和之后的所有记录)。在这种情况下,假设将返回相同的总数是公平的。
  • 没错,我正在拆分记录。我会假设无论我给出什么日期范围,它都会给我相同的金额
  • @user55474 查看我的更新,因为您从两个不同的列中进行选择,所以没有拆分它们
  • RedFilter - 抱歉弄乱了列名,我想我写错了列。我使用的是同一列。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-26
  • 1970-01-01
  • 2013-08-14
  • 1970-01-01
  • 2022-12-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多