zoukankan      html  css  js  c++  java
  • 含有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。


    示例语句如下:


     


    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 = 1 GROUP BY CategoryID) AS SubTable  
    4.  
    5. ON MainTable.CategoryID = SubTable.CategoryID 

     


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


    CategoryID TotalNum
    1 2
    2 2
    3 0

    表4-正确输出成果


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

     

    原文地址:http://blog.sina.com.cn/s/blog_6d5459990101ed5b.html

  • 相关阅读:
    中小型MIS开发之我见(二)具体实施(上)
    实现.NET应用程序的自动更新
    利用XML实现通用WEB报表打印(参考)
    几款开放源代码的软件测试工具介绍
    TextBox只输入数字
    HttpUtility 类 编码,解码字符串为Html字符串
    测试工具的选择和使用
    javascript技巧参考
    认识Web.config文件
    动态改变页面的CSS样式(收藏备用)
  • 原文地址:https://www.cnblogs.com/qhyhao/p/3517877.html
Copyright © 2011-2022 走看看