oracle nvl count 1 0,含有GROUP BY子句的查询中如何显示COUNT()为0的成果(分享)...

在SQL

Server数据库查询中,为了对查询成果进行对比、解析,我们经常会用到GROUP

BY子句以及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履行,是以在履行GROUP BY子句时,表中的记录已经将Category =

3的记录过滤,分组处理惩罚中天然不管帐算在内。

SQL

SELECT语句完全的履行次序:

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

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

3、GROUP

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

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

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

6、策画所有表达式;

7、应用ORDER

BY对成果进行排序。

3.解决规划:

机关含有所有CategoeyID的成果集与其上语句所得成果集进行连接,并哄骗NULL调换函数(如SQL

SERVER中的ISNULL()、ORACLE中的NVL())将NULL调换为0。

示例语句如下:

SELECT DISTINCT MainTable.CategoryID,ISNULL(SubTable.SubNum, 0) AS TotalNum FROM ExampleTable AS MainTable LEFT JOIN

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

ON MainTable.CategoryID = SubTable.CategoryID

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

CategoryID

TotalNum

1

2

2

2

3

0

表4-正确输出成果

以上就是SQL Server数据库中含有GROUP

BY子句的SELECT语句中显示COUNT()为0的成果的办法,本文就介绍到这里了,欲望本次的介绍可以或许对您有所收成

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值