【问题标题】:SQL sum strange behaviourSQL sum 奇怪的行为
【发布时间】:2021-02-05 16:23:54
【问题描述】:

如果我在 SQL 管理工作室中总结,有人可以解释为什么

| field |
---------
-41,07
-141,96
13,6
6
-13,6
-6
5,39
1,44
-6,83
41,07
141,96

用简单的查询

SELECT
      sum(
      field
      ) s
  FROM [table]

我得到了这个结果

|s|
---
-2,8421709430404E-14

【问题讨论】:

    标签: sql-server


    【解决方案1】:

    这是因为您选择的数据类型。您已将field 定义为float,因此您表示您对浮点值感到满意;这不是准确的数字。当您聚合许多浮点值时,您将获得科学计数法值并且很可能会失去准确性。如果您对此不满意,请不要使用float

    如您所见,下面给出了0,当值是准确的数据类型 (numeric) 而不是使用浮点数据类型时。

    SELECT SUM(NotAFloat) AS SummedNotAFloat,
           SUM(CONVERT(float,NotAFloat)) AS SummedFloat
    FROM(VALUES(-41.07),
               (-141.96),
               (13.6),
               (6),
               (-13.6),
               (-6),
               (5.39),
               (1.44),
               (-6.83),
               (41.07),
               (141.96))V(NotAFloat);
    

    【讨论】:

      【解决方案2】:

      我无法复制

        WITH CTE AS 
        (
            SELECT  -41.07 AS S UNION ALL
            SELECT  -141.96 UNION ALL
            SELECT 13.6 UNION ALL
            SELECT 6 UNION ALL
            SELECT -13.6 UNION ALL
            SELECT -6 UNION ALL
            SELECT 5.39 UNION ALL
            SELECT 1.44 UNION ALL
            SELECT -6.83 UNION ALL
            SELECT 41.07 UNION ALL
            SELECT 141.96  
        )
         SELECT SUM(C.S)
           FROM CTE AS C
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-07-25
        • 2013-06-26
        • 2017-10-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多