欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

sql server中count(字段名)和count(*)的特殊不同点

更新时间: 2014-01-05 02:07:58 责任编辑: Author_N1

 

Sql Server中COUNT(字段名)跟COUNT(*)的特殊不同点

今天有个需求,有2张表:
1、一个“搜索记录”表search,一个“搜索后下载记录”表down
2、映射关系:每一个下载记录对应一条搜索记录,
                          第个搜索记录对应一条下载记录,也可能没有下载记录

现在需要统计某个搜索词的搜索次数、下载次数 和 未下载次数
正常情况下需要统计3次:
SELECT COUNT(*) as 搜索次数 FROM search WHERE keyword='key';
SELECT COUNT(*) as 下载次数 FROM down WHERE keyword='key';
SELECT COUNT(*) as 未下载次数
  FROM search a LEFT JOIN down b ON a.keyword=b.keyword
 WHERE a.keyword='key' AND b.keyword IS NULL;

通过查询MSDN和相关试验后,发现COUNT(字段名),对字段值为null的,不会计数,因此上面3个SQL可以合并为:
SELECT COUNT(1) as 搜索次数, COUNT(b.keyword) as 下载次数
  FROM search a LEFT JOIN down b ON a.keyword=b.keyword
 WHERE a.keyword='key' ;

这个SQL里的“搜索次数 -下载次数=未下载次数”

其它补充:通常情况下,都是用下列sql统计记录条数:
SELECT COUNT(1)
SELECT COUNT(*)
SELECT COUNT(主键)
也有用 SELECT COUNT(0)
上 述4种COUNT方法完全一致,因为主键不可能为null,另外以前的COUNT有差异的说法,在最新的数据库,这些差异都没有了,需要注意的就是少用 COUNT(字段名),因为它会排除NULL值,导致计数跟结果不一致,推荐用COUNT(1),简单明了,下面是测试结果示意:


首发:http://beinet.cn
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:07:58
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/5999/
本文WWW.DOC100.NET DOC100.NET版权所有。