union all与空字段的一种用法

简介:
一个题目,觉得这是个非常经典的SQL语句。所以拿出来大家分享。因为想不出怎么叫合适,所以就暂且叫做空字段吧。
问题:

t1                                t2  
id    firstTime                   usid         lastTime   
1     2007-5-1                    1            2007-5-2 00:5:01  
2     2007-5-1                    2            2007-5-2 05:06:12  
3     2007-5-2                    3            2007-5-6 12:01:15  
4     2007-5-3                    4            2007-6-2 15:11:12  
5     2007-5-3                    5            2007-5-8 00:00:05  
6     2007-5-4   
7     2007-6-1   
8     2007-6-2   
9     2007-6-2
  

输出结果: 
time          count(firstTime)        count(lastTime)  
2007-5-1        2                        0  
2007-5-2        1                        2  
2007-5-3        2                        0  
2007-5-4        1                        0  
2007-5-5        0                        0 
2007-5-6        0                        0 
2007-5-7        0                        0 
2007-5-8        0                        0 
........... 
...........  
2007-6-2        2
   

我给的答案:

CREATE TABLE `t1` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `firstTime` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1

CREATE TABLE `t2` (
  `usid` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `lastTime` datetime NOT NULL,
  PRIMARY KEY (`usid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8

insert into t1(`firstTime`) values
('2007-5-1'),('2007-5-1'),('2007-5-2'),('2007-5-3'),('2007-5-3'),('2007-5-4'),('2007-6-1'),
('2007-6-2'),('2007-6-2');

insert into t2(`lastTime`) values
('2007-5-2'),('2007-5-2'),('2007-5-6'),('2007-6-2'),('2007-5-8');

select * from (
select cast(firstTime as char(10)) `time`,count(1) f_t,0 l_t from t1 group By `time` 
union all 
select cast(lastTime as char(10)) `time`,0 f_t, count(1) l_t from t2 group by `time`)T group by `time`;
 
输出:

query result(8 records)

time f_t l_t
2007-05-01
2 0
2007-05-02
1 0
2007-05-03
2 0
2007-05-04
1 0
2007-05-06
0 1
2007-05-08
0 1
2007-06-01
1 0
2007-06-02 
2 0




本文转自 david_yeung 51CTO博客,原文链接:http://blog.51cto.com/yueliangdao0608/81308 ,如需转载请自行联系原作者
相关文章
|
分布式计算 关系型数据库 BI
加速查询MaxCompute再对接FBI(帆软)的完整链路来啦!
本文旨在分享使用交互式分析查询MaxCompute数据,再对接FBI的完整链路,快速搭建大数据生态完整链路。
4682 0
|
存储 SQL 关系型数据库
MySQL请求使用union查询结果为空
MySQL请求使用union查询结果为空
|
9月前
|
存储 算法 API
同一段代码写N遍?通用树结构一次搞定
本文深入探讨了树形结构在实际应用中的广泛使用及其重要性,并提出了一套通用且高效的工具类TreeUtil来处理与树形数据相关的操作。
|
SQL 存储 JavaScript
前端浏览器调试详解版
前端浏览器调试详解版
315 0
|
JSON NoSQL 前端开发
微信扫码登录的技术实现思考
微信扫码登录是很常见的技术,曾经在一次面试当中,面试官就曾问过微信扫码登录的实现思路,这次,以微信读书网页版扫码登录为例子,聊聊我对它技术实现思路一些思考。
283 0
|
JSON 前端开发 数据格式
org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize instance of `object` out of START_ARRAY token
讲述如何处理 org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize instance of `object` out of START_ARRAY token的问题
 org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize instance of `object` out of START_ARRAY token
|
开发工具 git
git将master合并到分支
1.切换到master主分支上 2.将master更新的代码pull到本地 3.切换到自己的分支上 4.合并master到自己的分支 5.用idea或者sublime text解决冲突 6.add、commit
705 0
Zp
|
前端开发 Java
使用Java通过POI读取EXCEL中的数据
使用Java通过POI读取EXCEL中的数据
Zp
661 0
使用Java通过POI读取EXCEL中的数据
|
Java
Synchronized 和 Lock 的区别和使用场景
并发编程中,锁是经常需要用到的,今天我们一起来看下Java中的锁机制:synchronized和lock。
989 0
|
Java Maven
2022新版版本IDEA创建Maven项目卡死-Bug
在使用新版本IDEA的时候,我是2022.1版本,创建Maven项目时,我发现有时候IDEA会卡死。
963 0