解决方案是,将GROUP_BY结果与原始表进行合并。在这里,我们只有一个字段,即salary:
SELECT emp2.dept_id,
emp1.name,
emp1.gender,
emp2.max_salary
FROM (
SELECT dept_id,
Max(salary) as max_salary
FROM employees
GROUP BY dept_id
) as emp2 JOIN employees as emp1 ON emp1.salary = emp2.max_salary
GROUP BY dept_id;
emp1.name,
emp1.gender,
emp2.max_salary
FROM (
SELECT dept_id,
Max(salary) as max_salary
FROM employees
GROUP BY dept_id
) as emp2 JOIN employees as emp1 ON emp1.salary = emp2.max_salary
GROUP BY dept_id;
现在,name和gender字段属于最高工资者:
六、小结
很多时候,我们都需要清除结果集中的重复内容。为了解决这个问题,一个办法是在选择语句中加入关键字distinct。该关键字的作用是让查询引擎清楚重复内容,以便得到一个无重复记录的结果集。也许您还不知道,实际上group by子句也可用来删除重复的内容, 本文为读者介绍了两者之间的不同之处,以及它们是如何生成理想的结果集的。当然,我们还可以使用工作单元表和动态SQL删除结果集中的重复数据。有机会我们将在后文中专门加以讲解。