2017-10-12 65 views
1

空数据我想了解处理的黑斑羚

我使用下表

╔════╦══════════════╦══════════╗ 
║ id ║ name  ║ salary ║ 
╠════╬══════════════╬══════════╣ 
║ 1 ║ cde   ║ 5636  ║ 
║ 2 ║ asd   ║ 148  ║ 
║ 3 ║ pwe   ║ null ║ 
║ 4 ║ lmn   ║ 959  ║ 
╚════╩══════════════╩══════════╝ 
当我执行以下查询

在因帕拉算术运算的行为

select salary+20 as sum1 from table where id=3; 

它返回我

 |sum1 
    ---|----- 
    1 |NULL 

当我运行在列总和与

select sum(salary) as sum1 from table; 

    |sum1 
    ---|----- 
    1 |6743 

我无法了解相同的算术运算表现不同

回答

0

这些都是不同的算术查询。

在第一个查询你想要的DB从第3行3井行的salaryNULL返回salary+20。所以DB将看到NULL+20=NULL并返回NULL

但在第二个查询中:sum(salary) from table;要求数据库对整个salary列进行求和并将其返回给您。所以它看起来并且不会5636+148+959=6743(忽略NULL)。

总结在第一个查询中,您正在执行一个基本的算术运算符。但第二个查询sum()是应用于返回行的运算符。作为一个更好的测试,尝试运行select sum(salary) as sum1 from table where id=3,看看你能更好地理解正在发生的事情。

+0

按照你的理论,当我这样做从表总和(工资),其中id = 3应该忽略空并打印总和为zero.But还是它返回NULL – sri

+0

啊我看你可能会感到困惑。因此,在sum()中,如果数据库中有有效值,它将返回这些有效值的总和。但是,如果你试图总结无效的值,即。 'a + null + 1.144es'或者它会抱怨并返回'null'。但是'10 + null + 20 + a'会返回'30'。 – Francisco

+0

10 + null + 20 + a也返回NULL – sri

0

NULL不是零(0),零不是NULL,它是一个值,这是最重要的。 NULL是没有值的,什么也没有。 sum()仅限聚合值。如果数据集中没有任何值,则返回NULL。如果它是一些值,sum()会聚合它们,忽略空值。如果你想NULL其转换为零,使用NVL()功能:

select nvl(sum(salary),0) as sum1 from table where ... 

这个查询将返回的情况下0有数据集中没有值。

相关问题