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

作者:黑鲶鱼ny 时间:2024-01-19 13:39:35 

前言

近日在做一个报表功能里面有一个这样的需求是统计各部门在某一月入职和离职的人数

我的步骤

先查出入职的人数


SELECT dept ,COUNT(1) rcNumber FROM 员工表
WHERE ( 入职时间 != ''
 OR 入职时间 IS NOT NULL) and DATE_FORMAT(入职时间, '%Y-%m')= '2019-09'
GROUP BY 部门ID
ORDER BY 部门名称

查询记录

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

在查询出离职的人数sql:


SELECT dept ,COUNT(1) rcNumber FROM 员工表
WHERE ( 离职时间 != ''
 OR 离职时间 IS NOT NULL) and DATE_FORMAT(入职时间, '%Y-%m')= '2019-09'
GROUP BY 部门ID
ORDER BY 部门名称

结果集

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

我想要的数据是这样的

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

我有了以下的尝试

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合并结果接横向拼接字段的实现步骤

总结

来源:https://juejin.cn/post/6917513395981778958

标签:mysql,查询,拼接
0
投稿

猜你喜欢

  • Python 3.x基于Xml数据的Http请求方法

    2021-05-17 23:45:18
  • Django admin组件的使用

    2021-05-20 06:03:08
  • 在Python中使用AOP实现Redis缓存示例

    2021-09-12 11:18:45
  • js绘制购物车抛物线动画

    2024-04-10 16:18:09
  • sql语句中单引号嵌套问题(一定要避免直接嵌套)

    2024-01-16 14:48:52
  • 浅谈Python2获取中文文件名的编码问题

    2021-08-11 08:18:45
  • Python实现自动化刷抖音的实例

    2023-07-20 19:16:15
  • 解决django后台样式丢失,css资源加载失败的问题

    2021-05-21 13:00:38
  • python中必会的四大高级数据类型(字符,元组,列表,字典)

    2023-01-10 00:54:20
  • 利用selenium 3.7和python3添加cookie模拟登陆的实现

    2021-05-10 04:15:02
  • python的time模块和datetime模块实例解析

    2023-11-13 09:54:56
  • python如何运行js语句

    2022-04-10 02:34:27
  • Python 列表(List)操作方法详解

    2023-06-15 10:10:04
  • uni-app的基本使用教程

    2024-05-11 09:15:18
  • Oracle 添加用户并赋权,修改密码,解锁,删除用户的方法

    2009-10-14 11:37:00
  • vue以组件或者插件的形式实现throttle或者debounce

    2024-05-09 15:23:55
  • Jquery中Ajax 缓存带来的影响的解决方法

    2011-05-21 16:14:00
  • MySQL数据库的触发器和事务

    2024-01-15 21:35:08
  • 详解python如何调用C/C++底层库与互相传值

    2022-02-25 07:18:00
  • python爬虫之urllib,伪装,超时设置,异常处理的方法

    2022-07-23 23:47:10
  • asp之家 网络编程 m.aspxhome.com