SQL中我想用COUNT()来sql查询表我的子sql查询表中SELE到的行数

本站是提供个人知识管理的网络存储空间所有内容均由用户发布,不代表本站观点如发现有害或侵权内容,请点击这里 或 拨打24小时举报电话: 与我们联系

}

count函数的定义可见定义如下:

  • COUNT(*)返囙表的行数。它不会过滤null和重复的行

  • COUNT(expression)会过滤掉null值,所以值null行不会加入到计数当中但如果不在expression前面加上distinct关键字,它是会过滤掉重复行的

在应用中,好多人喜欢使用COUNT(1),这里面的1其实就是一个expression因为你的表中没有列名为1的列,那么它的返回结果是和COUNT(*)一模一样的

注意,COUNT 的参数expression鈳以为常量(像上面的23…),表的列,函数还可以是语句,具体可见的定义下面展示了这个应用。

如果想为cte1中列Description中有字符串'fox’进行计数典型的做法是:

这种做法是where中过滤,另外一种方式是在expression中定义查找条件:

如果description列中没有字符串'fox'那么PATINDEX函数返回的是0,NULLIF函数因为两个参数相等那么结果是NULL,因为NULL不会参与计数所以列中没有'fox’的行不会

参与计数,达到了查找的目的

当然,我们还可在expression中使用case表达式:

注意ELSE语句後面必须是NULL如果是非NULL,ELSE语句也会参与COUNT计数的

2 在count函数后接聚合窗口函数OVER。注意聚合窗口函数中是不能有ORDER BYORDER BY只能出现在排名函数的over子句中。OVER字句的定义见

以上在COUNT 的expression中设置条件显然不是一种很优化的方式,因为这种方式会首先读取表中的所有数据是对表进行扫描,而在where子呴中设置条件进行过滤是一种很好的方式因为从逻辑上讲,where先于select执行所有数据库引擎只会读取部分数据,不是读取所有数据如果要對以表中c1列的null进行统计,可以有两种方式:

最后看看执行计划的比较,后面的方式多了一个步骤(过滤):

}

我要回帖

更多关于 sql多条件查询 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信