SQL Server2000聚合函數(shù)和空值
當前位置:點晴教程→知識管理交流
→『 技術(shù)文檔交流 』
SQL Server2000的聚合函數(shù)大都會忽略空值,所以在含有空值的列上使用聚合函數(shù)時需格外謹慎。例如有一個Student表如下:
我們用下邊SQL語句統(tǒng)計下人數(shù)、平均年齡、最大年齡、最小年齡: 程序代碼 select count(*) as count1, count(age) as count2, avg(age) as [avg], max(age) as [max], min(age) as [min] from Student 引用內(nèi)容 count1 count2 avg max min ----------- ----------- ----------- ----------- ----------- 3 2 21 22 20 可以看到,除了count(*),其他聚合函數(shù)都忽略了stu3??梢允褂胕snull函數(shù)給空值設(shè)置一個默認值,讓聚合函數(shù)不忽略該行: 程序代碼 select count(*) as count1, count(isnull(age,0)) as count2, avg(age) as [avg], max(age) as [max], min(age) as [min] from Student 引用內(nèi)容 count1 count2 avg max min ----------- ----------- ----------- ----------- ----------- 3 3 21 22 20 注意:對avg、max、min聚合函數(shù)不應使用isnull,否則會出現(xiàn)用兩個人的年齡計算三個人的平均年齡,這顯然是不合理的。 很多時候,我們都會給字段設(shè)置一個默認值,當字段值為空值時就使用默認值,再看Student表: 我們用下邊SQL語句統(tǒng)計下人數(shù)、平均年齡、最大年齡、最小年齡: 程序代碼 select count(*) as count1, count(age) as count2, avg(age) as [avg], max(age) as [max], min(age) as [min] from Student 引用內(nèi)容 count1 count2 avg max min ----------- ----------- ----------- ----------- ----------- 3 3 14 22 0 很顯然,avg、min的值不是我們想要的,avg和min都應忽略stu3,這時我們可以用nullif函數(shù)讓聚合函數(shù)忽略它: 程序代碼 select count(*) as count1, count(nullif(age,0)) as count2, avg(nullif(age,0)) as [avg], max(nullif(age,0)) as [max], min(nullif(age,0)) as [min] from Student 引用內(nèi)容 count1 count2 avg max min ----------- ----------- ----------- ----------- ----------- 3 2 21 22 20 說明:當以文本顯示查詢時,若對含空值的列使用聚合函數(shù),SQL查詢分析器會發(fā)出警告。 引用內(nèi)容 count1 count2 avg max min ----------- ----------- ----------- ----------- ----------- 3 2 21 22 20 (所影響的行數(shù)為 1 行) 警告: 聚合或其它 SET 操作消除了空值。 該文章在 2011/3/13 0:27:51 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |