本文我们主要介绍了SQL Server数据库中在使用GROUP BY对查询出的结果进行分组时,COUNT()为0的结果无法显示的解决方法,希望能够对您有所帮助。
AD:
2014WOT全球软件技术峰会北京站 课程视频发布
在
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的结果的方法,本文就介绍到这里了,希望本次的介绍能够对您有所收获!
a表:id room_id1 room12 room23 room3b表id client_name room_name1 xiaowang room12 xiangzhang room13 xiangli room2统计这三个房间的人数,没有的默认为0
SELECT
a.room_id,
IFNULL(t1.
count
1, 0)
LEFT JOIN
我每月都有一套帖子.现在我需要一个数组,其
中
包含每个月发布的帖子的总记录.我在MySql下面尝试
查询
,它的工作正常,但是在没有记录的情况下,我期待0(零)几个月.这里没有返回0.我读到
COUNT
()不会返回’0′,那我怎么做到这一点?我尝试了IFNULL()和COALESCE()但仍然得到了相同的结果.请帮助解决此问题.谢谢……
SELECT
count
(id) as totalRecFROM ('p...
查询
近一年的每月
count
,如果没有则
显示
为0
SELECT
month(sysdate())-A.id,IF(C.
COUNT
3 IS NULL ,0,C.
COUNT
3) from
(
select
1 as id FROM DUAL
UNION ALL
select
2 as id FROM DUAL
UNION ALL
select
3 as id FROM DUAL
UNION ALL
select
4 as id FROM DUAL
UNION ALL
select
5 as id FROM
在SQL Server数据库
查询
中
,为了对
查询
结果进行对比、分析,我们经常会用到
GROUP
BY
子句
以及
COUNT
()函数来对
查询
结果进行分类、统计等。但是我们在使用的过程
中
往往会存在一些问题,就是当有where条件时,被where条件过滤的数据不
显示
了,所以
count
()函数等于0 的结果并没有
显示
。
现在有一张表sc的数据如下(sno学生编号,cno课程编号,score分数):
我想...
How to display 0 in conditional [
group
by
] report in
Count
() SQL Query DSC0000.jpg (15.17 KB, 下载次数: 0)2015-6-7 14:41 上传Challenge:Let me assume this: we have two tables, one is Regions table with all ...