一道一直没弄明白的sql 有关group

我的答案:

我的想法就是先把表按照emp_no给合并起来,然后对这个新表t进行筛选最大的工资并且按照部门分组。

select t.dept_no,t.emp_no,max(t.salary) as maxSalary from 
(select d.dept_no,d.emp_no,s.salary from dept_emp d
inner join salaries s on d.emp_no=s.emp_no
 where d.to_date='9999-01-01' and s.to_date='9999-01-01' ) t
 group by t.dept_no
 order by t.dept_no
 

可以通过的答案:

SELECT a.dept_no,b.emp_no,a.salary
FROM 
    (SELECT dept_no,MAX(salary) AS salary
    FROM salaries
    INNER JOIN dept_emp
    ON dept_emp.emp_no=salaries.emp_no
    WHERE dept_emp.to_date = '9999-01-01'
    AND salaries.to_date='9999-01-01'
    GROUP BY dept_no) AS a
INNER JOIN 
    (SELECT dept_no,dept_emp.emp_no,salary
    FROM dept_emp
    INNER JOIN salaries
    ON dept_emp.emp_no=salaries.emp_no
    WHERE dept_emp.to_date = '9999-01-01'
    AND salaries.to_date='9999-01-01')AS b
ON a.salary=b.salary
AND a.dept_no=b.dept_no
ORDER BY dept_no

然后主要原因是:mysql select中只能使用group中用过的字段

否则按我原来的做法maxsala和emp——no是不一定对应的!

原文地址:https://www.cnblogs.com/liuxiangyan/p/14488329.html