时间:2021-05-02
前言
近日在做一个报表功能里面有一个这样的需求是统计各部门在某一月入职和离职的人数
我的步骤
先查出入职的人数
? 1 2 3 4 5 select dept ,count(1) rcnumber from 员工表 where ( 入职时间 != '' or 入职时间 is not null) and date_format(入职时间, '%y-%m')= '2019-09' group by 部门id order by 部门名称查询记录
在查询出离职的人数sql:
? 1 2 3 4 5 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处理如下
? 1 2 3 4 5 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处理如下:
? 1 2 3 4 5 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 拼接
? 1 2 3 4 5 6 7 8 9 10 11 12 13 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合并结果接横向拼接字段内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://juejin.cn/post/6917513395981778958
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
Mysql的查询结果行字段拼接,可以用下面两个函数实现:1.concat函数mysql>selectconcat('1','2','3')fromtest;+-
本文实例讲述了PHP实现数组根据某个字段进行水平合并,横向合并。分享给大家供大家参考,具体如下:PHP数组水平合并,横向合并,两条数据合并成一行需求将两个素组中
在有些场景下,我们需要对我们的varchar类型的字段做修改,而修改的结果为两个字段的拼接或者一个字段+字符串的拼接。如下所示,我们希望将xx_role表中的n
MySQL添加字段的方法并不复杂,下面将为您详细介绍MySQL添加字段和修改字段等操作的实现方法,希望对您学习MySQL添加字段方面会有所帮助。 1.登录
mysql_result定义和用法mysql_result()函数返回结果集中一个字段的值。mysql_result()返回MySQL结果集中一个单元的内容。字