TSQL中 Count() 函数使用的一点小技巧
2007-04-13 12:31
323 查看
COUNT( * ) 返回组中项目的数量,这些项目包括 NULL 值和副本。
COUNT(ALL expression) 对组中的每一行都计算 expression 并返回非空值的数量。
COUNT(DISTINCT expression) 对组中的每一行都计算 expression 并返回唯一非空值的数量。
COUNT( expression ) 默认是ALL , COUNT( expression ) 其实相当于COUNT(ALL expression);
由于COUNT( * ) 和 COUNT( expression ) 返回的值会不一样,一些情况下就会有问题,比如下面的范例:
有以下两个表
Table1 有以下记录(类似一个分类表)
ID Title
1 aa
2 bb
3 cc
4 dd
5 ee
6 ff
Table2 有以下记录用来记录Table1中的分类具体出现,这里的ID对应Table1中的ID
ID
1
1
2
3
5
3
4
如果我们要统计每一个分类在Table2中的出现次数,(如果某个分类出现次数为0,也要统计出来)
可以用下面的SQL 语句
SELECT count(b.ID) as num ,a.ID as AnswerID
FROM Table1 a left OUTER JOIN Table2 b ON a.ID = b.ID
group by a.ID
如果是下面的写法,统计出来的结果就是错误的。:
SELECT count(*) as num ,a.ID as AnswerID
FROM Table1 a left OUTER JOIN Table2 b ON a.ID = b.ID
group by a.ID
另外这个统计可以通过下面的方式实现:
SELECT
CategoryID,
(SELECT COUNT(*) FROM Content WHERE CategoryID=c.CategoryID)
FROM
Category c
COUNT(ALL expression) 对组中的每一行都计算 expression 并返回非空值的数量。
COUNT(DISTINCT expression) 对组中的每一行都计算 expression 并返回唯一非空值的数量。
COUNT( expression ) 默认是ALL , COUNT( expression ) 其实相当于COUNT(ALL expression);
由于COUNT( * ) 和 COUNT( expression ) 返回的值会不一样,一些情况下就会有问题,比如下面的范例:
有以下两个表
Table1 有以下记录(类似一个分类表)
ID Title
1 aa
2 bb
3 cc
4 dd
5 ee
6 ff
Table2 有以下记录用来记录Table1中的分类具体出现,这里的ID对应Table1中的ID
ID
1
1
2
3
5
3
4
如果我们要统计每一个分类在Table2中的出现次数,(如果某个分类出现次数为0,也要统计出来)
可以用下面的SQL 语句
SELECT count(b.ID) as num ,a.ID as AnswerID
FROM Table1 a left OUTER JOIN Table2 b ON a.ID = b.ID
group by a.ID
如果是下面的写法,统计出来的结果就是错误的。:
SELECT count(*) as num ,a.ID as AnswerID
FROM Table1 a left OUTER JOIN Table2 b ON a.ID = b.ID
group by a.ID
另外这个统计可以通过下面的方式实现:
SELECT
CategoryID,
(SELECT COUNT(*) FROM Content WHERE CategoryID=c.CategoryID)
FROM
Category c
相关文章推荐
- TSQL中 Count() 函数使用的一点小技巧
- sqlserver中使用查询分析器的一点小技巧
- 在ASP.NET使用javascript的一点小技巧
- while循环中使用read读取变量的一点小技巧
- 代码简洁优化的一点思考:函数参数的判断与return 语句的使用
- 在ASP.NET使用javascript的一点小技巧
- 关于fopen函数中路径名使用字符串的一点看法
- 在ASP.NET使用javascript的一点小技巧
- Mysql中where 1=1 和count(0) 使用小技巧
- 在ASP.NET使用javascript的一点小技巧
- wince 中使用HttpSendRequest函数POST数据时应该注意的一点
- 使用yii中CSecurityManager的一点小技巧
- 在ASP.NET使用javascript的一点小技巧
- C++中使用_asm汇编调用动态库函数的一点问题
- 使用yii中CSecurityManager的一点小技巧
- Windows下程序打包发布时的小技巧(使用Dependency Walker侦测不理想,改用VS自带的dumpbin则万无一失,还可查看dll导出的函数)
- wince 中使用HttpSendRequest函数POST数据时应该注意的一点
- 在ASP.NET使用javascript的一点小技巧
- reverse 函数,countVowels 函数,EL函数的使用
- 使用HttpSendRequest函数POST数据时应该注意的一点