TSQL 聚合函数忽略NULL值
max,min,sum,avg聚合函数会忽略null值,但不代表聚合函数不返回null值,如果表为空表,或聚合列都是null,则返回null。count 聚合函数忽略null值,如果聚合列都是null或表为空表,则返回0。
共性:Null values are ignored.
一,聚合函数忽略NULL值
示例数据表
create table dbo.ftip ( ID int)
1,当表中没有任何数据时,聚合函数的返回值
select max(ft.ID),min(ft.ID),sum(ft.ID),AVG(ft.ID),count(ft.ID) from dbo.ftip ft with(NOLOCK)
2,当表中存在数据时,聚合函数对null值得处理
2.1, 表中数据只有null
insert into dbo.ftip values(null)
select max(ft.ID),min(ft.ID),sum(ft.ID),AVG(ft.ID),count(ft.ID) from dbo.ftip ft with(NOLOCK)
2.2 表中的数据含有null,也含有非null
insert into dbo.ftip values(1) select max(ft.ID),min(ft.ID),sum(ft.ID),AVG(ft.ID),count(ft.ID) from dbo.ftip ft with(NOLOCK)
3,count(*)或count(0)的特殊之处,不检查null值,返回分组的总行数
select count(ft.ID),count(0),count(*) from dbo.ftip ft with(NOLOCK)
4,在group by子句中,SQL Server 认为所有的null值是相同的,所有的null值分到同一个组中。
select ft.ID,count(ft.ID),count(0),count(*),max(ft.ID),min(ft.ID),sum(ft.ID),AVG(ft.ID) from dbo.ftip ft with(NOLOCK) group by ft.ID
5,聚合函数会忽略Null值,对非NULL的值进行聚合。
insert into dbo.ftip values(2) select max(ft.ID),min(ft.ID),sum(ft.ID),AVG(ft.ID),count(ft.ID) from dbo.ftip ft with(NOLOCK)
二,聚合函数Count的不同写法
Count有三种写法:count(*),count(expression),count(column_name),计数说明:
- Count(expression) ,count(column_name)计数的机制是:计算 expression,或表中column_name的值是否为NULL,如果为NULL则不计数,如果不是NULL则会计数;
- count(*),返回表中行的数目。Specifies that all rows should be counted to return the total number of rows in a table,即使有null或duplicate value,也会计算在内;
- 如果Expression或column_name的值不是null,count(expression),count(column_name)和count(*)返回的结果是相同的;
1,创建示例数据
create table dbo.test (id int) insert into dbo.test values(1),(2),(null)
2,测试 count(expression)
DECLARE @var int=null select count(@var) from dbo.test
结果分析:返回的结果是0,原因是expression是null,count函数对null值不计数。
3,测试count(0),count(*)
select count(*), count(0) from dbo.test
结果分析:返回的结果都是3,说明count(*)计算表的行数,不排除null值或duplicate值。由于0是非null值,count(0)和count(*)执行结果是相同的。
4,测试count(column_name)
select count(id) from dbo.test
结果分析:返回的结果是2,从表中取出id值,如果为null,则不计数;如果不是null,则计数。
参照文档:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?