含有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的成果的办法,本文就介绍到这里了,欲望本次的介绍可以或许对您有所收成
原文地址:http://blog.sina.com.cn/s/blog_6d5459990101ed5b.html
含有GROUP BY子句的查询中如何显示COUNT()为0的成果(分享)的更多相关文章
- GROUP BY子句的查询中显示COUNT()为0的结果
含有GROUP BY子句的查询中如何显示COUNT()为0的结果 在SQL Server数据库查询中,为了对查询结果进行对比.分析,我们经常会用到GROUP BY子句以及COUNT()函数来对查询结果 ...
- T-SQL GROUP BY子句 分组查询
SQL Server GROUP BY子句与SELECT语句协作使用,以将相同的数据分组. GROUP BY子句位于SELECT语句中的WHERE子句之后,位于ORDER BY子句之前. 语法 以下是 ...
- sql查询中datetime显示的格式为yyyy-DD-mm
datetime数据库中保存的形式为2008/9/29 星期一 上午 12:00:00,希望界面显示2008-09-29,则可以用到以下sql语句. ),kgrq, ),),jhjgrq, ),'/' ...
- SQL中关于不能显示count为0的行的问题
今天在写自己一个博客项目时遇到了一个数据库问题,因为对于数据库自己所知道的还是很浅显的,对一些查询语句不怎么熟悉. 我目前有一个文章表和评论表,评论表里面有个post_id对应文章表里面的id,想查询 ...
- 6.InfluxDB-InfluxQL基础语法教程--GROUP BY子句
本文翻译自官网,官网地址:(https://docs.influxdata.com/influxdb/v1.7/query_language/data_exploration/) GROUP BY子句 ...
- Mysql查询语句的 where子句、group by子句、having子句、order by子句、limit子句
Mysql的各个查询语句 一.where子句 语法:select *|字段列表 from 表名 where 表达式.where子句后面往往配合MySQL运算符一起使用(做条件判断) 作用:通过限定 ...
- 选择列表中的列无效,因为该列没有包含在聚合函数或 GROUP BY 子句中
选择列表中的列无效,因为该列没有包含在聚合函数或 GROUP BY 子句中 T-SQL核心语句形式: SELECT --指定要选择的列或行及其限定 [INTO ] --INTO子句 ...
- 在LINQ查询中LINQ之Group By的用法
LINQ定义了大约40个查询操作符,如select.from.in.where.group 以及order by,借助于LINQ技术,我们可以使用一种类似SQL的语法来查询任何形式的数据.Linq有很 ...
- 选择列表中的列……无效,因为该列没有包含在聚合函数或 GROUP BY 子句中
今天用SQL Server尝试实现一个SQL语句的时候,报了如标题所示的错误,通过在百度里面搜索,并亲自动手实现,终于发现问题所在,现在把它记录下来. 语句如下: select [OrderID],[ ...
随机推荐
- Servlet处理Cookie
1.CGI:进程,servlet:线程 2.HttpServletResponse下的方法就没有get开头的,(PrintWriter)getWriter在ServletResponse下. 3.st ...
- 在ios7真机上和iOS6模拟器上运行是好的,而在iOS6真机上运行却报错
在ios7真机上和iOS6模拟器上运行是好的,而在iOS6真机上运行却报错 解决方法: 或是都设置为yes.. Build Active Architecture Only的意思是只生成适应的指令集
- android ADT Bundle for Mac下载地址
直接下载解压就能用 http://developer.android.com/sdk/index.html
- ServletContextListener作用(转)
ServletContext 被 Servlet 程序用来与 Web 容器通信.例如写日志,转发请求.每一个 Web 应用程序含有一个Context,被Web应用内的各个程序共享.因为Context可 ...
- Android 每天定时提醒功能实现
android要实现定时的功能那肯定就要用到闹铃相关的技术, 那么android闹铃实现是基于 AlarmManager 这个类的,首先我们来看一下它的几个主要的方法. 打开AlarmManager的 ...
- haskell模块(modules)
装载模块 Haskell 中的模块是含有一组相关的函数,类型和类型类的组合.而 Haskell 进程的本质便是从主模块中引用其它模块并调用其中的函数来执行操作.这样可以把代码分成多块,只要一个模块足够 ...
- 实现对properties文件的有序读写
最近遇到一项需求,要求把properties文件中的内容读取出来供用户修改,修改完后需要再重新保存到properties文件中.很简单的需求吧,可问题是Properties是继承自HashTable的 ...
- 【HDOJ】2966 In case of failure
KD树,这东西其实在ML经常被使用,不过30s的时限还是第一次见. /* 2966 */ #include <iostream> #include <string> #incl ...
- UnderStand Perspective Rasterization, SV_POSITION(gl_FragCoord) to Pixel, SV mean Systems Value
Shader "UnderStandPRR" { Properties { _MainTex ("Texture", 2D) = "white&quo ...
- Hibernate(五)一对一单向关联映射
上次的博文中 Hibernate从入门到精通(四)基本映射我们已经讲解了一下基本映射和相关概念,接下来 我们会讲稍微复杂点的映射——关系映射. 关系映射分类 关系映射即在基本映射的基础上处理 多个相关 ...