SQL group by throws error

时间:2014-04-21 06:34:15

标签: sql

我想显示在特定域中具有最大CTC的员工的姓名。

select Domain, max(CTC) from Employee group by Domain

这将显示该特定域的域和最大CTC。

但如果我使用

select Domain,empname, max(CTC) from Employee group by Domain

然后显示错误很明显 所以,如果我修改它,那就去了它。

select Domain,empname, max(CTC) from Employee group by Domain,empname

输出错误

但是我需要显示员工姓名以及Domain和最大CTC。 任何帮助都将受到高度赞赏。

4 个答案:

答案 0 :(得分:1)

select m.Domain, e.empname, m.max_CTC 
from Employee e
join (select Domain, max(CTC) max_CTC from Employee group by Domain) m
on e.Domain = m.Domain
and e.CTC = m.max_CTC

以下是SQLFiddle

答案 1 :(得分:0)

试试这个

SELECT E.Domain,E.empname,E.CTC FROM
Employee E JOIN
(select Domain,max(CTC) MaxCTC from Employee group by Domain) T
ON E.Domain = T.Domain AND E.CTC = T.MaxCTC

<强> FIDDLE DEMO

答案 2 :(得分:0)

<强>问题:

使用聚合函数时,需要按选择查询中的所有其他列名进行分组。

解决方案:

您必须使用联接。

试试这个:

SELECT E2.Domain,E1.empname,E2.MaxVal as Max
FROM Employee E1 INNER JOIN
(SELECT Domain,MAX(CTC) as MaxVal FROM Employee GROUP BY Domain) E2 
ON E1.Domain=E2.Domain

答案 3 :(得分:0)

试试这段代码很简单;

select MAX(Domain),empname, max(CTC) from Employee group by empname