备案后可以修改网站吗,重庆移动网站制作,做网站公司宁波上市,wordpress4.1题目#xff1a;获取每个部门中当前员工薪水最高的相关信息 注意了#xff0c;这道题目#xff0c;分组函数只能查出来#xff1a;每个部门的最高薪水#xff0c;group by dept_no #xff0c;根据部门分组#xff0c;绝对不能group by dept_no,emp_no#xff0c;不能… 题目获取每个部门中当前员工薪水最高的相关信息 注意了这道题目分组函数只能查出来每个部门的最高薪水group by dept_no 根据部门分组绝对不能group by dept_no,emp_no不能根据部门、员工编号联合分组
(select e1.dept_no, max(s1.salary) as salary from dept_emp e1 joinsalaries s1one1.emp_no s1.emp_no group by e1.dept_no ) s2
方法一 三张表联查 select e.dept_no , e.emp_no , s.salary as maxSalary
from dept_emp e joinsalaries s
one.emp_no s.emp_no join (select e1.dept_no, max(s1.salary) as salary from dept_emp e1 joinsalaries s1one1.emp_no s1.emp_no group by e1.dept_no ) s2 #这是s2表ons2.dept_no e.dept_no and s2.salary s.salary
where e.to_date9999-01-01 and s.to_date9999-01-01
order by e.dept_no;
优化通过使用 WITH 语句创建了一个名为 max_salaries 的临时表这样可以更清晰地理解查询的逻辑。
WITH max_salaries AS (SELECT e1.dept_no, MAX(s1.salary) AS max_salaryFROM salaries s1INNER JOIN dept_emp e1 ON e1.emp_no s1.emp_noGROUP BY e1.dept_no
)
SELECT e.dept_no,e.emp_no,s.salary AS max_salary
FROM dept_emp e
JOINsalaries s ON e.emp_no s.emp_no
JOINmax_salaries ms ON e.dept_no ms.dept_no AND s.salary ms.max_salary
ORDER BY e.dept_no;方法二居然还能这样玩 in 的用法可以使用元组形式
select d.dept_no,d.emp_no,s.salary
from dept_emp as d
join salaries as s
on d.emp_no s.emp_no
where (d.dept_no,salary) in (# in 的用法可以使用元组形式 找出部门和对应的最高工资
select d.dept_no,max(s.salary) salaryfrom dept_emp as djoin salaries as son d.emp_no s.emp_nogroup by d.dept_no
)order by d.dept_no 在 MySQL 中子查询中使用 IN 操作符时需要确保子查询返回的结果列数与外部查询中的比较列数相匹配。在这个查询中子查询返回三列 (dept_no, max_salary, from_date)而外部查询试图将其与两列 (dept_no, salary) 进行比较这导致了错误 为了解决这个问题可以将子查询的结果限制为两列即 (dept_no, max_salary)并且在外部查询中使用这两列进行比较。以下是修改后的查询 这样就能够正确地比较子查询和外部查询的列数并得到想要的结果。