NULL值的一些知识

SELECT   count(base_uom) as 'my_column' , base_uom
FROM     schema.table
group by base_uom
order by 'my_column'

想对表schema.table里的base_uom字段做统计分析,就是想看看这字段里的某个值出现了几次,
由于这字段里有NULL值,统计的时候SQLServer是不分析的,
就是说不管这字段里NULL出现了几次,count出来总是0
结果:
-----------------------
my_column   base_uom
----------- ----------
0           NULL
1           %
1           CAN
-----------------------

用这个方法就可以了:
SELECT  count(isnull(base_uom,'')) as 'my_column' , base_uom
FROM    schema.table
group by base_uom
order by 'my_column'

结果:
my_column   base_uom
----------- ----------
1           %
1           CAN
14          UNIT
22          NULL
23          STR
25          G
30          PRS
34          TN

说明:
count(isnull(base_uom,''))
这个用了个函数,其实第二个参数''无所谓了,随便什么,只要不是NULL,让其参加统计就可以了

-----------------下面的文字是转其他人的,参考参考------
NULL值的三大特点,分别是:1)NULL值不参加统计;2)NULL值不进入计算表达式;3)不能与其它值进行比较。
所谓NULL值不参加统计 即 在使用统计函数时,凡是涉及到 NULL值的都会被忽视掉(用词可能不准确),不要以为这不重要,其实在某些地方这是很重要的。
而 NULL值不进入计算也就是说在进行数据之间的统计计算时,若有为 NULL值的项,那么它是不进入即不参加计算的。这也是一个不容忽视的问题。这即使在生活中也是常见的。
就好比如说一个人的奖金为NULL值(没有录入数据或其它的原因,不做探讨),而他的基本工资总不会为 0 吧?!(如果为0,早就被T了),月末算总工资的时候把基本工资加上奖金,
而若是奖金为 NULL值,总工资 = 基本工资 + 奖金(NULL),那么当此种情况发生时,总工资 = 基本工资 ?
     肯定的回答是:不等于。因为奖金为 NULL值,NULL值代表具体的什么值?都不知道。而不知道NULL值到底是多少,那么又怎么能进行计算呢?所以总工资等于 NULL 的,也是不确定的。这样,还有员工敢在公司吗?万一你来个总工资的 NULL 为真的空了,那还做什么工作啊?!这就涉及到一个强制转换的问题,即把 NULL值强制转换为 0 ,让其具备业务意义。而强制转换的关键字就是 IS ,语法即 IS NULL;这样就可以进行涉及 NULL值的计算了。
不过 NULL值也不是对所有的统计函数都有影响。一般来说。统计平均值(AVG)时, NULL值是一定会有影响的;统计最小值(MIN)时, NULL值是可能会对 MIN 有影响,在我认为是有点随机性质;统计最大值(MAX)或统计和(NULL)时,NULL值是对其完全没有影响的。
所以又有一种说法是:null值不参加统计,不参加计算,只能用is判断。
判断Null值语句:select * from 表 where 字段 is null;
转换null值语句:select 字段1,字段2,字段3,is null(字段3,’某个值’) from 表;
总之,我们要认真对待 NULL值,最好在使用统计函数时,都加上 IS NULL,以防意外出现。
还有有关强制转换的关键字:cast ,convert。

关于舍入,示例:
select ceiling(10.1),ceiling(10.9);             --结果:     11     
select floor(10.1),floor(10.9);             --结果:     10
select ceiling(-10.1),ceiling(-10.9);             --结果:   -10
select floor(-10.1),floor(-10.9);             --结果: -11

你可能感兴趣的:(工作,生活)