MySQL的生成年度报告的一个月明智的工作人员的名字
我有两个表的用户,并login_tableMySQL的生成年度报告的一个月明智的工作人员的名字
用户表
id Name status ----------------------
1 Johan 1
2 Smith 1
. . . .
----------------------
登录表
id user_id login_date hours -------------------------------------
1 1 2017-01-01 8
2 1 2017-01-02 7
3 2 2017-01-03 12
4 2 2017-01-02 10
. . . .
-------------------------------------
反正是有,我们可以获取数据像以下?
index user_id name Jan Feb Mar .... Dec Total ---------------------------------------------------------
1 1 Johan 100 120 115 .... 120 455
1 2 Smith 100 110 120 .... 110 440
. . . . . . . .
---------------------------------------------------------
我们已经使用PHP/MYSQL完成了这项工作,但需要很多时间来处理和执行。无论如何,我们可以直接从MySQL获取?
回答:
我不知道什么是index
,但其余的是联接,group by
和条件汇总:
select u.id, u.name, sum(case when month(l.login_date) = 1 then hours else 0 end) as jan,
sum(case when month(l.login_date) = 2 then hours else 0 end) as feb,
. . .,
sum(hours)
from users u join
login l
on u.id = l.login_id
where l.login_date >= '2017-01-01' and l.login_date < '2018-01-01'
group by u.id, u.name;
注:
- 上日期的比较上使用
>=
和<
目的。这是可取的,因为MySQL可以在数据上使用索引。 - 这假设您只希望在该年登录的用户。否则,左连接是适当的。
- 我不知道
index
是什么。也许你的意思是status
?
以上是 MySQL的生成年度报告的一个月明智的工作人员的名字 的全部内容, 来源链接: utcz.com/qa/263519.html