【问题标题】:My sql Group By case for getting highest paid employee in specific yearMy sql Group By case 在特定年份获得最高薪员工
【发布时间】:2015-10-09 07:14:24
【问题描述】:

有两张桌子 1 名员工 2工资

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

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

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 日期和工资输出总和是:
empid - empname - sum(salary)
2 - xyz - 40000

【问题讨论】:

  • 请指定 dbms 供应商,您已经有了 Oracle 和 T-SQL 的答案,这些可能与您的 db 无关

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


【解决方案1】:

用这样的东西试试……我只是看了一眼,给你指明了正确的方向,这个查询可能需要一些修复

Select TOP 1 emp.eid, emp.ename, sal.salary
from Employee emp 
join Salary sal on emp.salaryID = sal.salaryID
where DATEPART(yy,sal.date) =  2014
order by sal.salary desc

祝你好运

【讨论】:

    【解决方案2】:

    这样的东西可以工作

    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 语法。 而且我没有加入Employee表,但相信添加它并不难。

    【讨论】:

      【解决方案3】:

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

      类似这样的:

      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
      

      希望这会有所帮助。

      【讨论】:

        【解决方案4】:

        MySQL 代码,

        SELECT Top 1 E.ename         EmployeeName,
               MAX(salary)  AS EmployeeSalary
        FROM   Employee E
               INNER JOIN Salary S
                    ON  E.salaryID = S.salaryID
        WHERE  YEAR(S.Date) = 2014
        GROUP BY
               E.eId,
               E.ename
        

        【讨论】:

          【解决方案5】:

          #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;

          【讨论】:

          • #delete duplicates for my notes DELETE a FROM testk a ,testk b WHERE a.name=b.name AND a.id> b.id;
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2022-11-14
          • 2016-05-23
          • 2017-03-22
          • 1970-01-01
          • 1970-01-01
          • 2021-02-21
          • 2020-10-26
          相关资源
          最近更新 更多