【问题标题】:SUM of each row is counting null values as 0. How do I make mysql skip null values?每行的 SUM 将空值计为 0。如何使 mysql 跳过空值?
【发布时间】:2013-06-26 16:38:03
【问题描述】:

嗯,这些值不是空值,它们是VARCHAR(30),而是十进制形式。但是,某些记录在某些字段中具有“NA”。当用于SUM 的字段中存在“NA”时,我希望mysql 在SUM 计算中跳过这些行。 Mysql 将所有不可计算的字段视为 0。包含“NA”的字段中的 0 具有误导性。我正在做一个GROUP BYTABLE.ID

编辑:

选择

总和(

案例 当 X >1 然后 1

当 X

结束

案例

当 Y >1 然后 1

当 Y

其他 3

结束)

AS "Col X+Y";

来自表 A 按表 A_ID 分组;

有时 X 和/或 Y = 在某些字段上为“NA”。如果 TableA_ID 上的 X 和 Y 都为 17,或者当其中一个为“NA”时,我得到 6。

编辑(引用我对 VARCHAR 的评论):

“我尝试将我的值存储为 DEC(5,2),但 Excel 中的一些数据在字段中有 NA。我确实设置了 X DEC(5,2) NULL 并尝试了将 NA 插入其中,但一直出错(不能为空)。我也尝试将默认值设为“NA”,但仍然出现错误(不能为空)。我将添加一个示例查询作为编辑。”

【问题讨论】:

  • 但是如果它们被视为0,它们无论如何都不会被计算...
  • 为什么将数字存储在varchar(30) 中,为什么存储NA 而不是NULL
  • 正如@fthiella 所说的那样——这不会影响SUM 的结果,但对于AVG 会影响。如果还不算太晚,我会将其设为NUMERIC 列并使用NULL 而不是NA;这就是它应该如何完成的。
  • 一个不“求和行”,一个“求和列”。请显示您正在尝试的查询示例。
  • 我尝试将我的值存储为 DEC(5,2),但 Excel 中的一些数据在字段中有 NA。我确实将 Col1 DEC(5,2) 设置为 NULL 并尝试将 NA 插入其中但不断收到错误(不能为空)。我也尝试将默认值设为“NA”,但仍然出现错误(不能为空)。我将添加一个示例查询作为编辑。

标签: mysql null sum


【解决方案1】:

我明白了。我使用

添加了另一个 WHERE 子句

WHERE ..... AND(Colx IS NOT NULL OR Coly IS NOT NULL OR ......);

如果字段值为 NULL,我将值切换回 DEC(3,1) 并使用默认值 null 将字段设为 NULL。我必须了解如何使用 NULL。我在 Excel 中取出了“NA”并将这些字段值留空。

【讨论】:

    【解决方案2】:

    如果 foo1 为 null 或 NA 则将其相加为零(加法中的中性值),否则将值相加。

    select sum( case when foo1  is null or foo1 = 'NA' then 0 else foo1 end) as sum, foo2
    from FooTable group by foo2
    

    select sum(foo1) from FooTable
    where (foo2 <> 'NA' and foo2 is null) and (foo3 <> 'NA' or foo3 is null )
    group by foo4
    

    【讨论】:

    • 问题是如果值为“NA”,则有一个数字值。我正在查询实验室测试中的表格。 NA 表示不记录,IE:NA =/=0。做一个“NA”是不可行的?每个字段上的 BINARY...
    • 问题是你无法正确解释自己...试试这个新的陈述...如果这不能帮助提供示例真实数据,以及应该发生什么(这实际上比知道你在做什么)...
    猜你喜欢
    • 2020-12-29
    • 1970-01-01
    • 2020-12-15
    • 1970-01-01
    • 2022-10-14
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多