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

回到顶部