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
----------- ----------
[color=red]0 NULL[/color]
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
[color=red]22 NULL[/color]
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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章