首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Left或Group用于在Mysql中找到最高薪资

Left或Group用于在Mysql中找到最高薪资
EN

Stack Overflow用户
提问于 2017-04-19 12:42:50
回答 1查看 935关注 0票数 0

我试着去理解为什么人们普遍认为避免一群人在一起总是有益的。我的问题是:从department_id是外键的雇员表中,找出员工最高工资为40000的部门。

[1]小组采用的方法:

代码语言:javascript
复制
 select d.department_name , e.max_salary 
   from department d
   join ( select department_id, max(salary) as max_salary
   from emp 
   group by 1
   having max_salary = 40000 ) e
   on (d.department_id = e.department_id)

2现在采用左联接方法:

代码语言:javascript
复制
 select d.department_name, inner_q.salary
 from    department d
 join
 (select e.department_id , e.salary
  from  emp  e
  left join emp  e_inner
  on (e.department_id = e_inner.department_id and e.salary < e_inner.salary)
  where e_inner.department_id is null and e.salary = 40000 ) inner_q
  on (d.department_id = inner_q.department_id)

不幸的是,解释计划对我来说没有多大意义。任何帮助,解释谁应该表现得更好,为什么会非常感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-19 14:10:40

你工作太辛苦了。

代码语言:javascript
复制
SELECT  department_name, MAX(salary) AS max_salary
    FROM  emp
    GROUP BY  department_name
    HAVING  max_salary >= 40000

这将比任何带有子查询的版本都要快。

这将使它运行得更快:INDEX(department_name, salary)

(也许你想要的是>= 40000,而不是= 40000?)

此版本将对整个表(或INDEX,如果添加“覆盖”索引)进行一次传递,为每个部门收集最高工资。然后,它将丢弃失败HAVING子句的结果;交付其余的结果。

对于在10K行的表上运行这个GROUP BY,我不会感到不安。一个百万行的表将花费一个值得注意的,但很小的时间。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43496095

复制
相关文章

相似问题

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