含有GROUP BY子句的查询中如何显示COUNT()为0的结果

SQLServer数据库查询中,为了对查询成果进行对比、解析,我们经常会用到GROUPBY子句以及COUNT()函数来对查询成果进行分类、统计等。然则我们在应用的过程中往往会存在一些题目,本文我们就介绍了一个题目,并给出了它的解决规划,接下来就让我们来一路懂得一下这项目组内容吧。


1.题目:


如下ExampleTable表,求各类类(CategoryID)满足Flag便是1的记录数。


ID Flag CategoryID
1 1 1
2 1 1
3 1 2
4 1 2
5 0 3

表1-ExampleTable 


幻想的成果应当如下:


CategoryID TotalNum
1 2
2 2
3 0

表2-幻想输出成果


初看此题目,我们很轻易写出如下语句:


SELECT CategoryID,COUNT(1) AS TotalNum FROM ExampleTable WHERE flag= 1 GROUP BY CategoryID


可运行之后获得的成果如下:


CategoryID TotalNum
1 2
2 2

表3-错误输出成果


没有CategoryID=3,TotalNum=0的记录。


2.原因解析:


造成以上成果的原因是因为在SELECT语句中WHERE子句先于GROUP BY履行,是以在履行GROUPBY子句时,表中的记录已经将Category = 3的记录过滤,分组处理惩罚中天然不管帐算在内。


SQL SELECT语句完全的履行次序:


1、FROM子句组装来自不合数据源的数据;


2、WHERE子句基于指定的前提对记录进行筛选;


3、GROUP BY子句将数据划分为多个分组;


4、应用凑集函数进行策画;


5、应用HAVING子句筛选分组;


6、策画所有表达式;


7、应用ORDER BY对成果进行排序。


3.解决规划:


机关含有所有CategoeyID的成果集与其上语句所得成果集进行连接,并哄骗NULL调换函数(如SQLSERVER中的ISNULL()、ORACLE中的NVL())将NULL调换为0。


示例语句如下:


 


  1. SELECT DISTINCT MainTable.CategoryID,ISNULL(SubTable.SubNum, 0) AS TotalNum FROM ExampleTable AS MainTable LEFT JOIN 
  2.  
  3. (SELECT CategoryID,COUNT(1) AS SubNum FROM ExampleTable WHERE flag GROUP BY CategoryID) AS SubTable 
  4.  
  5. ON MainTable.CategoryID SubTable.CategoryID 

 


履行后即可返回正确的成果:


CategoryID TotalNum
1 2
2 2
3 0

表4-正确输出成果


以上就是SQL Server数据库中含有GROUPBY子句的SELECT语句中显示COUNT()为0的成果的办法,本文就介绍到这里了,欲望本次的介绍可以或许对您有所收成

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值