复杂的mysql更新基于两个字段和'大多数'标准是什么?

时间:2015-07-27 01:46:11

标签: mysql sql-update

update employee as a 
      set a.sup_role=(
                    select b.job_role from employee as b 
                           where b.supervisorid=a.employeeid 
                           group by b.job_role 
                           order by count(b.job_role) desc 
                           limit 1
                     ) 
       where a.job_role='MAN1';

好的,我有一张我们所有员工的表 - 大约100K。

我们所有的用户都有基于employee.job_title构建的工作角色。因此,基于4K + job_titles,我将其降低到大约40个job_roles。这样我们就可以根据employee.job_roles在CMS中分配内容。这一直很好,但问题在于管理者。经理得到一些通用的公司job_title,我们将其作为一个通用的job_role。

您在上面看到的是我用来做我需要做的事情的代码 - 根据他们的大多数员工所做的事情找出什么职位是主管?#34;。这会输出正确的sup_role但我的代码有几个问题:

  • 根据我的语法,它不会让我直接更新员工表。我必须更新一名员工"帮助"表格并稍后填写。
  • 因此它正在解析job_role" MAN1"。首先,我不想更新此内容以添加新的经理职位角色。此外,这并不能说明我的公司正在做一些特殊的事情,比如经理只有一个普通的职位或不同的NULL字段。
  • 然后最后一部分是这段代码需要6分钟才能完成。幸运的是,我将其作为批处理作业运行,但我担心它可能会导致崩溃。

所以我有下表 -

  

雇员

     

适用的字段

     

雇员

     

supervisorid

     

JOB_TITLE

     

job_role

     

sup_role

以下是我的最后一次尝试。它只是运行,从不输出任何东西。我想知道我是否需要创建一个帮助表来抓住DISTINCT supervisorid,因为一个员工可能是很多人的主管。

update employee as a 
      set a.sup_role=(
                    select b.job_role from employee as b 
                           where b.supervisorid=a.employeeid 
                           group by b.job_role 
                           order by count(b.job_role) desc 
                           limit 1
                     ) 
      WHERE a.uid IN (select DISTINCT employee.supervisorid
                                    from employee
                                    where employee.supervisorid is not null
                                   );

0 个答案:

没有答案