Mysql合并结果接横向拼接字段的实现步骤

 更新时间:2021年01月15日 11:48:14   作者:黑鲶鱼ny  
这篇文章主要给大家介绍了关于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

最终就得到了我想要的结果

总结

到此这篇关于Mysql合并结果接横向拼接字段的文章就介绍到这了,更多相关Mysql合并结果接横向拼接字段内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 从其他电脑访问本机的Mysql的设置方法

    从其他电脑访问本机的Mysql的设置方法

    如果需要让特定的用户从给定域(例如mydomain.com)的所有计算机上访问 MySQL 服务器,你可以执行在账户名的 host 部分使用了通配符“%” 的 GRANT 语句
    2008-11-11
  • Mysql分片,大数据量时扩容解决方案

    Mysql分片,大数据量时扩容解决方案

    这篇文章主要介绍了Mysql分片,大数据量时扩容解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • 低版本Druid连接池+MySQL驱动8.0导致线程阻塞、性能受限

    低版本Druid连接池+MySQL驱动8.0导致线程阻塞、性能受限

    应用升级MySQL驱动8.0后,在并发量较高时,查看监控打点,Druid连接池拿到连接并执行SQL的时间大部分都超过200ms,本文就解决一下这个问题
    2021-07-07
  • Navicat 连接MySQL8.0.11出现2059错误

    Navicat 连接MySQL8.0.11出现2059错误

    这篇文章主要介绍了Navicat 连接MySQL8.0.11出现2059错误,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • mysql自动插入百万模拟数据的操作代码

    mysql自动插入百万模拟数据的操作代码

    这篇文章主要介绍了mysql自动插入百万模拟数据的示例代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定参考借鉴价值,需要的朋友可以参考下
    2021-10-10
  • mysql中like % %模糊查询的实现

    mysql中like % %模糊查询的实现

    这篇文章主要介绍了mysql中like % %模糊查询的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • window下mysql 8.0.15 winx64安装配置方法图文教程

    window下mysql 8.0.15 winx64安装配置方法图文教程

    这篇文章主要为大家详细介绍了window下mysql 8.0.15 winx64安装配置方法图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-03-03
  • Windows7下如何在命令行使用MySQL

    Windows7下如何在命令行使用MySQL

    这篇文章主要介绍了Windows7下如何在命令行使用MySQL的相关资料,需要的朋友可以参考下
    2015-12-12
  • Navicat工具中设置MySQL允许外部访问

    Navicat工具中设置MySQL允许外部访问

    默认情况下MySQL只允许本地登录,即只能在安装MySQL环境所在的主机下访问,这篇文章主要给大家介绍了关于Navicat工具中设置MySQL允许外部访问的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-04-04
  • Mysql使用concat函数实现关键字模糊查询功能(列表数据过滤含前后端代码)

    Mysql使用concat函数实现关键字模糊查询功能(列表数据过滤含前后端代码)

    在我们的平时开发中经常会遇到根据条件过滤列表数据项,今天在做自己项目的时候就遇到了这个问题,正好借着这个机会分享我的思路以及相关的代码,对Mysql使用concat函数实现关键字模糊查询功能感兴趣的朋友一起看看吧
    2023-02-02

最新评论