如何选择未在groupby子句中列出的列



根据每个部门的最高工资从表中选择id

工资25000<25000>
Id 部门
1 支持
2 支持 20000
3 开发 35000
4 开发
5 开发 30000

我们可以返回dept列的值,以及每个部门的最高工资:

SELECT m.dept
, MAX(m.salary) AS max_salary 
FROM mytable m
GROUP
BY m.dept

我们可以将其转换为内联视图(或"派生表"(,并将其连接到原始表。我们可以获得与行匹配的详细信息行(关于部门和最高工资(

SELECT t.id
--   , t.dept
--   , t.salary
FROM ( 
-- maximum salary from each dept
SELECT m.dept
, MAX(m.salary) AS max_salary 
FROM mytable m
GROUP
BY m.dept
) s
JOIN mytable t
ON t.dept   = s.dept
AND t.salary = s.max_salary
ORDER
BY t.id

请注意,如果mytable中有两行(或多行(对于同一部门具有相同的最高工资,则将返回两行(或者全部(匹配的行。

作为示例,考虑一下如果将行(5,'support',35000)添加到mytable中,查询将返回什么。现在,在"支持"部门有两行人的工资最高。

select Id from table as t1 inner join 
(select id, max(salary) from table  group by dept) as t2 on t1.id= t2.id

最新更新