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