sql查询统计,根据新闻类别ID统计,没有数据显示0
有两张表,新闻信息表MessageInfo和新闻类别表MessageType。表结构如下:
然后需要实现下面这种查询结果:
这个是我面试时遇到的,上面的新闻类型是乱写的。当时没有做出来,然后回来又研究了下。
刚开始是这么想的,新闻类型表MessageType左连接left join新闻信息表MessageInfo,筛除那些新闻ID为空的,然后根据新闻类型名直接分组统计。
select MessageName as '新闻类型',COUNT(*) as '新闻数量' from MessageType left join MessageInfo
on MessageType.MessageTypeId=MessageInfo.MessageTypeId where MessageId is not null
group by MessageName
出现了这种结果:
原因是执行group by之前,已经先执行where条件筛选了。当时脑袋就一直被绕进这两个先后顺序的弯里,出不来。百度了好久,都没有结果,最后还是询问了几个同学才搞出来。
思路是这样的,先对通过新闻类型ID对新闻信息表MessageInfo进行统计分组,返回一个包含新闻类型ID和新闻数量的新集合,然后左连接到新闻类型表MessageType中。这个时候就基本上完成了。那些没有新闻类型下没有新闻信息的左连接后就是null,最后我们把null用isnull()函数替换成0就可以。sql语句如下:
select a.MessageName as '新闻类型',isnull(b.count,0) as '新闻数量' from MessageType as a
left join(
select MessageTypeId,count(1) as [count] from MessageInfo group by MessageTypeId) as b
on a.MessageTypeId=b.MessageTypeId
最后就可以得到想要的结果。
sql查询统计,根据新闻类别ID统计,没有数据显示0的更多相关文章
- SQL查询一个表中类别字段中Max()最大值对应的记录
SQL查询一个表中类别字段中Max()最大值对应的记录 SELECT A.id, A.name, A.version FROM DOC A, (SELECT id, MAX(version) ...
- sql查询未走索引问题分析之查询数据量过大
前因: 客户咨询,有一个业务sql(代表经常被执行且重要),全表扫描在系统占用资源很高(通过ash报告查询得到信息) 思路: 1.找到sql_text,sql_id 2.查看执行计划 3.查询sql涉 ...
- Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等)
Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等) 子查询 描述:查询订单数超过5的顾客信息 查询句法: var 子查询 = from c i ...
- Thinkphp查询 1.查询方式 2.表达式查询 3.快捷查询 4.区间查询 5.组合查询 6.统计查询 7.动态查询 8.SQL 查询
1.使用字符串作为条件查询 $user = M('User'); var_dump($user->where('id=1 AND user="蜡笔小新"')->sele ...
- SQL查询各阶段的统计信息
我们经常会遇到各种分类统计问题,须要将这些结果一次显示出来.这次老师提出的要求是我想看60分下面多少人.60~70多少人,70~80多少人.80~90多少人,90~100多少人.他们曾 ...
- SQL SERVER 月、季、年统计与常用查询语句汇总
一.SQL SERVER 月.季.年统计查询 --本天 SELECT *FROM dbo.TableName WHERE DATEDIFF(DAY,TimeField,getdate())= 0; - ...
- 全废话SQL Server统计信息(2)——统计信息基础
接上文:http://blog.csdn.net/dba_huangzj/article/details/52835958 我想在大地上画满窗子,让所有习惯黑暗的眼睛都习惯光明--顾城<我是一个 ...
- 【mysql】 mybatis实现 主从表 left join 1:n 一对多 分页查询 主表从表都有查询条件 【mybatis】count 统计+JSON查询
mybatis实现 主从表 left join 1:n 一对多 分页查询 主表从表都有查询条件+count 需求: ======================================= ...
- 每日学习心得:SQL查询表的行列转换/小计/统计(with rollup,with cube,pivot解析)
2013-8-20 1. SQL查询表的行列转换/小计/统计(with rollup,with cube,pivot解析) 在实际的项目开发中有很多项目都会有报表模块,今天就通过一个小的SQL ...
随机推荐
- Ubuntu Kylin14.04终于可以使用root登陆了
Ubuntu Kylin14.04怎样使用root登陆? 方法:找到/usr/share/lightm/ightm.conf.d 用gedit或者vi 打开50-unity-greet ...
- redis list 使用
参考:http://redis.cn/commands.html#list BLPOP key [key ...] timeout删除,并获得该列表中的第一元素,或阻塞,直到有一个可用 BRPOP k ...
- JAVA-开发环境搭建之JDK安装配置教程
在进行java开发前先要搭建java的开发环境 下载java的开发环境eclipse 安装&配置环境变量 1,JDK安装
- 解决使用DevExpress开发错误:未将对象引用设置到对象的实例
在使用DevExpress是总是会出现一些状况.这次同事在他的机器上调试完成的代码发过来,却出现"未将对象引用设置到对象的实例"的错误,提示是Resources.resx的问题.另 ...
- Android系统Recovery工作原理之使用update.zip升级过程分析(一)
通过分析update.zip包在具体Android系统升级的过程,来理解Android系统中Recovery模式服务的工作原理.我们先从update.zip包的制作开始,然后是Android系统的启动 ...
- C#二维数组(矩形数组,交错数组)
C# 支持一维数组.多维数组(矩形数组)和数组的数组(交错的数组) 1.多维数组 声明:string[,] names; 初始化:int[,] numbers = new int[3, 2] { {1 ...
- rtp的封包与拆包h264
请看文档rfc3984 1.看h264的帧 SPS序列參数帧 00 00 00 01 67 64 . . .. PPS图像參数帧 00 00 00 01 68 EE... . I帧 00 00 00 ...
- 贪心算法(Greedy Algorithm)之最小生成树 克鲁斯卡尔算法(Kruskal's algorithm)
克鲁斯卡尔算法(Kruskal's algorithm)是两个经典的最小生成树算法的较为简单理解的一个.这里面充分体现了贪心算法的精髓.大致的流程能够用一个图来表示.这里的图的选择借用了Wikiped ...
- PXC的原理
http://www.blogs8.cn/posts/AWif6E4 mariadb的集群也是抄percona的,原理跟PXC一样maridb-cluster就是PXC,原理是一样的.codeship ...
- day05 Java基础
1.数组初始化:为数组开辟内存空间,并为每个数组元素赋予值.数组初始化方式: 方式一:动态初始化:初始化时只指定数组长度,由系统为数组分配初始值. 格式:数组类型[] 数组名称=new 数组类型[数组 ...