Mysql合并结果接横向拼接字段的实现步骤
作者:黑鲶鱼ny 发布时间:2024-01-19 13:39:35
标签:mysql,查询,拼接
前言
近日在做一个报表功能里面有一个这样的需求是统计各部门在某一月入职和离职的人数
我的步骤
先查出入职的人数
SELECT dept ,COUNT(1) rcNumber FROM 员工表
WHERE ( 入职时间 != ''
OR 入职时间 IS NOT NULL) and DATE_FORMAT(入职时间, '%Y-%m')= '2019-09'
GROUP BY 部门ID
ORDER BY 部门名称
查询记录
在查询出离职的人数sql:
SELECT dept ,COUNT(1) rcNumber FROM 员工表
WHERE ( 离职时间 != ''
OR 离职时间 IS NOT NULL) and DATE_FORMAT(入职时间, '%Y-%m')= '2019-09'
GROUP BY 部门ID
ORDER BY 部门名称
结果集
我想要的数据是这样的
我有了以下的尝试
1.我将两个查询结果看成两个表,使用了left join 不瞒您说数据格式是我想要的 但是想了想要是右表的记录比较多使用这个不就会少数据吗(right 同理)
2.我使用 union all 这个不是想要的数据 直接将两个结果相加竖向拼接
3.我使用了如同这种 select * from a,b 这个结果是笛卡尔积 两个表相乘的结果
以上方法的sql 就不贴出 意思应该明确了
我不信我就一直问百度 ,百度终于有了回答 我就尝试了一番
1.将入职sql处理如下
SELECT a.dept,a.rcNumber,0 as lcNumber FROM (SELECT dept ,COUNT(1) rcNumber FROM 员工表
WHERE ( 入职时间 != ''
OR 入职时间 IS NOT NULL) and DATE_FORMAT(入职时间, '%Y-%m')= '2019-09'
GROUP BY 部门ID
ORDER BY 部门名称) a
离职sql处理如下:
SELECT a.dept,a.lcNumber,0 as rcNumber FROM (SELECT dept ,COUNT(1) rcNumber FROM 员工表
WHERE ( 离职时间 != ''
OR 离职时间 IS NOT NULL) and DATE_FORMAT(入职时间, '%Y-%m')= '2019-09'
GROUP BY 部门ID
ORDER BY 部门名称) a
在外面包一层也可不包直接在原sql上加 我是为不破坏基本语句 这样当然不够
2.将两个语句进行竖向拼接合并联合sum 拼接
SELECT dept ,sum(cm_1) as rcNumber,sum(cm_0) as lcNumber FROM( SELECT c.id,c.dept,SUM(c.lcNumber) as cm_0,c.rcNumber as cm_1 FROM
(SELECT a.dept,a.rcNumber,0 as lcNumber FROM (SELECT dept ,COUNT(1) rcNumber FROM 员工表
WHERE ( 入职时间 != ''
OR 入职时间 IS NOT NULL) and DATE_FORMAT(入职时间, '%Y-%m')= '2019-09'
GROUP BY 部门ID
ORDER BY 部门名称) a) c GROUP BY c.dept
UNION ALL
SELECT d.id,d.dept,d.lcNumber as cm_0,SUM(d.rcNumber) as cm_1 FROM
(SELECT a.dept,a.lcNumber,0 as rcNumber FROM (SELECT dept ,COUNT(1) rcNumber FROM 员工表
WHERE ( 离职时间 != ''
OR 离职职时间 IS NOT NULL) and DATE_FORMAT(入职时间, '%Y-%m')= '2019-09'
GROUP BY 部门ID
ORDER BY 部门名称) a) d GROUP BY d.dept) t GROUP BY t.dept ORDER BY t.id
最终就得到了我想要的结果
总结
来源:https://juejin.cn/post/6917513395981778958
0
投稿
猜你喜欢
- 什么是 go-cachego-cache 是一个轻量级的基于内存的 K-V 储存组件,内部实现了一个线程安全的 map[strin
- sorted函数sorted(iterable,key,reverse)iterable 待排序的可迭代对象key 对应的是个函数, 该函数
- css的流行导致了标签的流行,很直观,看起来很清爽。流行的一部分,还有很多种功能强大且美观的导航。。。1. Change.org2. N.D
- 忙碌了一年,今天终于放假了。原本打算好好休息一下,没成想只过了半天就觉得有点无聊。看家人和朋友们都在忙年,那我就用OpenGL导演一场烟花盛
- 有一个 Selenium 脚本(Python),它点击回复按钮使anonemail类出现。anonemail 类出现的时间各不相同。因此,我
- JavaScript: <script type="text/javascript"> var level1
- 原以为在IronPython中使用MySQL是一件很容易的事情,即使有麻烦,也可以改变路径,加载Python下的MySQL模块。事实证明,这
- terminal(命令行)作为本地IDE普遍拥有的功能,对项目的git操作以及文件操作有着非常强大的支持。对于WebIDE,在没有web伪终
- 目前我使用到的python中执行cmd的方式有三种使用os.system("cmd")  
- 一、变量的定义程序中,数据都是临时存储在内存中,为了更快速的查找或使用这个数据,通常我们把这个数据在内存中存储之后,给整个数据定义一个名称,
- QThread是Qt的线程类中最核心的底层类。由于PyQt的的跨平台特性,QThread要隐藏所有与平台相关的代码要使用的QThread开始
- 前言本文总结了mysql中DCL,常用的一些权限控制,后续使用到其他会继续补充。一、用户控制管理创建用户create user '用
- 在开发中我们经常遇到这样的需求,需要用户直接点击一个链接进入到一个页面,用户点击后链接后会触发401拦截返回登录界面,登录后又跳转到链接的页
- 方法一:单表导入(1)打开"SQL Server 外围应用配置器"-->"功能的外围应用配置器"
- Python3还是没有switch,可以利用if-else来实现,但是非常不方便。使用dict来实现会比较简洁优雅。# -*- coding
- 说明1、导入模块pyplot,并指定别名plt,以避免重复输入pyplot。模块化pyplot包含许多用于制作图表的功能。2、将绘制的直线坐
- 单表的唯一查询用:distinct多表的唯一查询用:group bydistinct 查询多表时,left join 还有效,全连接无效,在
- 背景:做任务领金币的过程很无聊,而且每天都是重复同样的工作,非常符合自动化的定义;工具:python,appium,Android 手机(我
- 在工作中,我们经常需要从命令行当中解析出指定的参数,而 Python 也提供了相应的标准库来做这件事情,比如 sys, optparse,
- 字符串字符串常用操作拼接字符串拼接字符串需要使用‘+’运算符可完成对多个字符串的拼接。如str =