首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL生成具有员工名称的月度年度报告

MySQL生成具有员工名称的月度年度报告
EN

Stack Overflow用户
提问于 2017-12-18 13:00:05
回答 1查看 143关注 0票数 0

我有两个表用户和login_table

用户表

代码语言:javascript
复制
 id   Name    status
----------------------
 1   Johan      1    
 2   Smith      1    
 .  .   .       .    
----------------------

登录表

代码语言:javascript
复制
 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   
 .        .       .             .     
-------------------------------------

不管怎样,我们可以像下面这样获取数据吗?

代码语言:javascript
复制
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获取这个信息?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-18 13:03:05

我不知道index是什么,但其余的是一个连接、group by和条件聚合:

代码语言:javascript
复制
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
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47869066

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档