mysql 查询分组问题,根据年月 人员分组

查询根据月和人员分组

 select e.id eid,e.name ename,c.name cname,DATE_FORMAT(s.change_time,'%Y-%m') weeks,
sum(s.intergral_num) count,t.integral from sec_employee e
LEFT JOIN sec_integral_table t on e.id=t.emp_id
LEFT JOIN sec_company c on c.id=e.company_id
LEFT JOIN sec_integral_log s on s.integral_id=t.id 
and s.change_time >='2018-07-01' and s.change_time<= '2018-08-31'
where e.id=1075 or e.id=1070
group by t.emp_id,weeks

实际结果:

图片说明

期望结果:

图片说明

7个回答

新建了一张表,每月扫一次把上个月的数据存进去

用IFNULL格式化下weeks和count就行了。。

select e.id eid,e.name ename,c.name cname,
ifnull(DATE_FORMAT(s.change_time,'%Y-%m'),DATE_FORMAT(now(),'%Y-%m')) weeks,
ifnull(sum(s.intergral_num) ,0) count,
t.integral from sec_employee e
LEFT JOIN sec_integral_table t on e.id=t.emp_id
LEFT JOIN sec_company c on c.id=e.company_id
LEFT JOIN sec_integral_log s on s.integral_id=t.id
and s.change_time >='2018-07-01' and s.change_time<= '2018-08-31'
where e.id=1075 or e.id=1070
group by t.emp_id,weeks

qq_34775102
木mu升 回复caozhy: 个鬼,自己没试过就瞎说,你看看我的要求,三条数据变四条不懂别插嘴,还语言攻击我
5 个月之前 回复
caozhy
贵阳老马马善福专门编写代码的老马就是我! 这个是正解!
大约一年之前 回复

ifnull(sum(s.intergral_num) ,0) count, 这有用 时间那个有问题

我的意思是无论有没有数据 如果查 两个月就每人显示两个月两条数据 查三个月就每人显示三条数据

时间筛选有问题DATE_FORMAT(s.change_time,'%Y-%m') 筛选的时候1075在sec_integral_log 表是没有数据的

使用交叉连接可以实现,即将人员数据和时间数据相乘得到固定的数据记录,在左连接其数据源表即可得到你想要的结果。

(select * from
(select id from sec_employee where id in ('1075','1070')) a
CROSS JOIN
(select DATE_FORMAT(s.change_time,'%Y-%m') weeks from sec_integral_log where change_time >='2018-07-01' and change_time<= '2018-08-31' group by weeks) b) cc
left join ......
left join ......

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!