我的sql Group By在特定年份获得薪水最高的员工

时间:2015-10-09 07:14:24

标签: mysql database join group-by having-clause

有两张桌子 1名员工 2薪水

Employee : eId, ename, salaryId
Salary : salaryId, eId, salary, date

工资表包含员工工资的月度记录, 喜欢:

eId日期工资

1       2015-jan-01    10000
1       2015-feb-01    10000
1       2015-mar-01    10000
1       2014-jan-01    10000
1       2014-feb-01    10000
1       2014-mar-01    10000
2       2015-jan-01    10000
2       2015-feb-01    10000
2       2015-mar-01    10000
2       2014-jan-01    10000
2       2014-feb-01    10000
2       2014-mar-01    20000

所以查询是在特定年份为我提供最高薪的员工:2014年

所以这里使用group by和date输出的工资是:
empid - empname - sum(salary)
2 - xyz - 40000

4 个答案:

答案 0 :(得分:1)

尝试使用类似的东西......我只是瞥了一眼指向正确的方向,这个查询可能需要一些修复

MaxPoolSize
祝你好运

答案 1 :(得分:0)

这样的事情可以起作用

with salaries as (
select to_char(date,'yyyy') y, eld, sum(salary) s_sal
from salary
group by to_char(date,'yyyy'), eld)

select eld
from salaries s
where s_sal = (select max(s_sal) from salaries where y=s.y)
and s.y='2014';

但是你没有指定DB,所以有Oracle语法。 而且我没有加入员工表,但相信加入它并不困难。

答案 2 :(得分:0)

如果要求是每年获得收入最高的员工名单,那么这可以通过“排名”逻辑来实现。

这样的事情:

SELECT 
    Year(SalaryMonthDate) AS [Payroll Year],
    EID, 
    Sum(Amout) AS [Annual Salary],
    RANK() OVER(PARTITION BY Year(SalaryMonthDate) ORDER BY Sum(Amout) DESC) [Rank]
FROM tblSalary
GROUP BY Year(SalaryMonthDate), EID

希望这有帮助。

答案 3 :(得分:0)

#highest paid emp in specific year SELECT e.empId,e.empName,SUM(s.salary),s.salDate FROM emp e INNER JOIN salary s ON e.empId = s.empId WHERE YEAR(s.salDate)=2009 GROUP BY s.empId ORDER BY SUM(s.salary) DESC LIMIT 1;