您的位置:首页 > 数据库

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: