从组中获取最大值

时间:2013-04-18 18:55:28

标签: mysql

我有一个表格结构

Emp_id  Emp_name    Emp_sal Depat
1       AB          10000   A
2       CB          12000   A
3       DA          7000    B
4       SB          2000    B
5       WE          6000    A
6       CF          10000   B
7       AK          8000    C
8       LM          6000    C

我需要一个结果作为每个离开组的最大emp_sal离开 喜欢

Emp_name   Emp_sal  Depart
CB         12000    A
CF         10000    B
AK         8000     C

我写了一个查询:

SELECT DISTINCT (emp_sal) , depart from emp 
group by depart
having emp_sal = (select max(emp_sal) from emp group by depart  )

但是这没用。我尝试了几个其他查询,但没有得到所需的结果。

3 个答案:

答案 0 :(得分:2)

回答上述问题:

select max(emp_sal), depart
from emp 
group by depart

但是,我怀疑你希望整个行包含每个部门的最高薪水:

select emp_name, emp_sal, depart
from (select * from emp order by emp_sal desc) x
group by depart

注意:这是一个仅限mysql的解决方案(使用whacky group by),但问题是标记为mysql,这有效:)

答案 1 :(得分:0)

部门最高工资:

SELECT Depart, MAX(Emp_Sal)
  FROM emp
  GROUP BY Depart

在其部门拥有最高薪水的员工名单:

SELECT Depart, Emp_Name, Emp_Sal
FROM Emp
WHERE (Depart, Emp_Sal) IN (
  SELECT Depart, Max(Emp_Sal)
  FROM Emp
  GROUP BY Depart)

答案 2 :(得分:0)

查询Emp_sal对于组是否唯一:

<强> SQLFIDDLEExample

SELECT 
t1.Emp_name,
t1.emp_sal,
t1.Depat 
FROM emp t1
WHERE  t1.emp_sal = (SELECT max(t2.emp_sal) 
                    FROM emp t2 
                    WHERE t2.Depat = t1.Depat)

如果每组不唯一:

SELECT 
t1.Emp_name,
t1.emp_sal,
t1.Depat 
FROM emp t1
WHERE  t1.Emp_id = (SELECT t2.Emp_id 
                    FROM emp t2 
                    WHERE t2.Depat = t1.Depat
                    ORDER BY t2.Emp_sal DESC
                    LIMIT 1)

结果:

| EMP_NAME | EMP_SAL | DEPAT |
------------------------------
|       CB |   12000 |     A |
|       CF |   10000 |     B |
|       AK |    8000 |     C |