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,则计数。

参照文档:

COUNT (Transact-SQL)

Select count(*)和Count(1)的区别和执行方式

TSQL 聚合函数忽略NULL值的更多相关文章

  1. SQL中AVG、COUNT、SUM、MAX等聚合函数对NULL值的处理

    一.AVG() 求平均值注意AVE()忽略NULL值,而不是将其作为“0”参与计算 二.COUNT() 两种用法 1.COUNT(*) 对表中行数进行计数不管是否有NULL 2.COUNT(字段名) ...

  2. Mysql中使用聚合函数对null值的处理

    平时因为对于数据库研习的不深,所以在面试的时候问了一些平常遇到过的问题居然没法很肯定地回答出来,实在让自己很恼怒! 这次让我记忆深刻的一个问题是: 在mysql中使用聚合函数的时候比如avg(t),t ...

  3. Mysql 聚合函数返回NULL

    [1]聚合函数返回NULL 当where条件不满足时,聚合函数sum().avg()的返回值为NULL. (1)源数据表 (2)如下SQL语句 SELECT sClass, COUNT(*) AS t ...

  4. SQL中AVG()、COUNT()、SUM()等函数对NULL值处理

    一.AVG() 求平均值 注意AVE()忽略NULL值,而不是将其作为“0”参与计算 二.COUNT() 两种用法 1.COUNT(*) 对表中行数进行计数 不管是否有NULL 2.COUNT(字段名 ...

  5. Oracle nvl()函数处理null值

    首先我先说一下什么是Oracle的函数,曾经有一位大牛,让我说说熟悉的oracle函数,我当时竟一头雾水,心想“什么oracle函数啊,不就是那些SQL语句吗“,当时我竟然说出了select之类的回答 ...

  6. T-SQL 聚合函数Count与NULL

    大家都知道聚合函数是做统计用的,而count函数是统计行数的,也就是满足一定条件记录的行数. 下面我们来看下这个count与NULL的微妙关系. CREATE TABLE dbo.Student ( ...

  7. oracle 中的round()函数、null值,rownum

    round()函数:四舍五入函数 传回一个数值,该数值按照指定精度进行四舍五入运算的结果. 语法:round(number[,decimals]) Number:待处理的函数 Decimals:精度, ...

  8. 自定义函数实现NULL值替换

    数据库环境:SQL SERVER 2005 有时候,想将查询查询数来的数据格式化一下,不希望显示NULL值,或者复制表的数据时,被插入的表不允许有NULL. 我们可以通过ISNULL()函数或者COA ...

  9. copyProperties 忽略null值字段

    在做项目时遇到需要copy两个对象之间的属性值,但是有源对象有null值,在使用BeanUtils来copy时null值会覆盖目标对象的同名字段属性值,然后采用以下方法找到null值字段,然后忽略: ...

随机推荐

  1. java基础-泛型3

    浏览以下内容前,请点击并阅读 声明 8 类型擦除 为实现泛型,java编译器进行如下操作进行类型擦除: 如果类型参数有限制则替换为限制的类型,如果没有则替换为Object类,变成普通的类,接口和方法. ...

  2. UTC时间和本地时间的区别

    在用AS3的Date时,年月日都有两个api,带UTC和不带UTC的,比如fullYear,fullYearUTC 输出看一下: var date:Date = new Date; trace(dat ...

  3. JSPatch 中 defineClass 中覆盖方法的使用

    今天研究了一下JSPatch,发现好神奇好奇妙,感觉这几天我都会乐此不彼的去研究这个高大上的东西. 出处来着:https://github.com/bang590/JSPatch 简单介绍一下这个 d ...

  4. C# EXCEL导入 混合列文字为空,找不到可安装的 ISAM的解决办法

    C# EXCEL导入 混合列文字为空,找不到可安装的 ISAM的解决办法 使用C#导入 Excel数据到 DataTable,如果连接串中只写 Excel 8.0,则正常的字符列,数值列都没有问题,但 ...

  5. 新版startssl 免费SSL证书申请 (实测 笔记 https http2 必要条件)

    简单说明: 目前多个大型网站都实现全站HTTPS,而SSL证书是实现HTTPS的必要条件之一. StartSSL是StartCom公司旗下的.提供免费SSL证书服务并且被主流浏览器支持的免费SSL.包 ...

  6. 【转】GitHub 排名前 100 的安卓、iOS项目简介

    GitHub Android Libraries Top 100 简介 排名完全是根据 GitHub 搜索 Java 语言选择 (Best Match) 得到的结果, 然后过滤了跟 Android 不 ...

  7. sessionStorage/localStorage 本地存储

      if(!sessionStorage.getItem('vote2')||sessionStorage.getItem('vote2')==NaN)sessionStorage.setItem(' ...

  8. Hbuilder开发HTML5 APP之向导页制作

    研究了下,向导页的制作还是比较简单的,主要使用的是mui控件中的”图片轮播“组件,组件的标签写法手册中有,中间发现个有趣的东西,如果要作全屏,可以加个样式mui-fullscreen 滑动图片时会自动 ...

  9. C#线程入门---转载

    C#中的线程(一)入门 文章系参考转载,英文原文网址请参考:http://www.albahari.com/threading/ 作者 Joseph Albahari,  翻译 Swanky Wu 中 ...

  10. DM 多路径存储

    DM多路径存储 系统环境:RHEL5.4 small install  selinux and iptables disabled主机规划:主机网卡软件station133eth0: 192.168. ...