mysql 数据横向拼接_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 部门名称复制代码
结果集
我想要的数据是这样的
![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/8fb0440e13764d72bc06d4b0723a9ce7~tplv-k3u1fbpfcp-watermark.image)
我有了以下的尝试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复制代码
最终就得到了我想要的结果
mysql 数据横向拼接_Mysql 合并结果接横向拼接字段相关推荐
- mysql拼接数组_Mysql合并结果接横向拼接字段的实现步骤
前言 近日在做一个报表功能里面有一个这样的需求是统计各部门在某一月入职和离职的人数 我的步骤 先查出入职的人数 SELECT dept ,COUNT(1) rcNumber FROM 员工表 WHER ...
- mysql数据表去重合并_MySQL数据表合并(两表字段相同)以及数据去重(抄)
数据去重 现有两个表 test_01 test_02 其中test_01有重复数据 统计重复数据 select count(*) as repeat_count,name from test_01 g ...
- mysql数据备份与恢复_MySQL数据备份与恢复
常见的MySQL管工具 mysql 命令行 跨平台 MySQL官方bundle包自带 MySQL-Workbench 图形 跨平台 MySQL官方提供 MySQL-Front 图形 Windows 开 ...
- centos mysql数据迁移_Mysql 5.7.17 离线版安装和数据迁移(centos 7)
总结下离线版 MySQL 5.7.17 的安装步骤: 1.从官网下载mysql 离线版版安装包 mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz: 2.上传安装包my ...
- mysql数据控制语言_mysql数据控制语言DCL(Data Control Language)-数据库
编辑推荐: 本文来自于网络,主要介绍了mysql数据控制语言DCL的创建.删除.修改用户密码.授予权限等代码编写. #创建用户 create user '用户名'@'允许登录的地址' identifi ...
- 03 mysql数据查询_MySql学习day03:数据表之间的连接、查询详解
主键: 关键字:primary key 特点:不能为null,并且唯一. 主键分类: 逻辑主键:例如ID,不代表实际的业务意义,只是用来唯一标识一条记录(推荐) 业务主键:例如username,参与实 ...
- mysql数据 lt =_MySql之数据操作
一.增 1. 插入完整数据(顺序插入) 语法一: INSERT INTO 表名(字段1,字段2,字段3-字段n) VALUES(值1,值2,值3-值n); 语法二: INSERT INTO 表名 VA ...
- mysql数据恢复工具_mysql文件恢复软件|Mysql数据库修复工具(Recovery for MySQL)下载 V2.7.22255.1 官方版 - 比克尔下载...
Recovery for MySQL是一款Mysql数据库修复工具,也可以用来恢复mysql文件,支持3.x.4.x.5.x等多个版本,支持myd和myi文件,它可以将检索到的数据保存至SQL脚本中, ...
- mysql数据迁移工具_MySQL数据迁移工具的设计与实现
一.背景 MySQL作为最流行的关系型数据库产品之一,当数据规模增大遭遇性能瓶颈时,最容易想到的解决方案就是分库分表.无论是进行水平拆分还是垂直拆分,第一步必然需要数据迁移与同步.由此可以衍生出一系列 ...
最新文章
- Java 使用匿名内部类在方法内部定义并启动线程
- 七牛上传图片html,使用七牛云上传图片
- RDLC 示例 文章 1
- 牛客网 【每日一题】6月11日题目精讲 背包
- el-table某列的列宽自适应,其他列按比例分配。
- 使用adb调试android
- 感谢大家对我微软TECHED2013课程的支持
- Oracle数据库 invalid character问题解决
- java callable接口_Java多线程之Callable接口的实现有返回值的线程
- oracle ora 01152,ORA-01152 故障解决
- Mysql之索引优化案例
- 微信小程序开发学习笔记007--微信小程序项目01
- 每天一道算法题(27)——找出元音字母并排序
- nfs挂载hdfs,实现云存储
- python 中的 type(), dtype(), astype()的区别
- javascript中模仿接口(interface)
- 多人对战中国象棋文档
- MongoDB下载(速度较快操作)
- 社保缴费满15年就可以不缴了?6个很多人最关心的问题权威解答来了
- 深信服2018校园招聘C++工程师编程题 - 题解