【问题标题】:Find Employee name who is having highest salary in given month in SQL在 SQL 中查找给定月份薪水最高的员工姓名
【发布时间】:2014-05-09 16:15:12
【问题描述】:

我有两张表,第一张是 Employee,第二张是 Salary。

员工:

薪水:

这是两个表的结构,我需要找到 2014 年 2 月薪水最高的人的姓名。

我尝试了下面的查询,但没有得到正确的输出。

select first_name+' '+last_name as Name from Employee where 
(select top(1)empid from Salary order by salary_amt desc)

【问题讨论】:

  • 好吧,salary_monthDATE,2014 年 2 月的值是如何存储的? (提示:您需要在查询中的某处添加该条件)
  • @Lamak 工资月份存储为 2014-02-28
  • salary_amt nvarchar 吗?您需要先将其转换为 numeric 类型,然后将 order 转换为 descending 以获得第一行

标签: sql sql-server join sql-order-by


【解决方案1】:

您可以在 empId 上加入第一个和第二个表。使用 max(salary_amt) 并确保在 where 子句中添加日期条件,如 @Lamak 所述

【讨论】:

    【解决方案2】:

    这应该可行:

    选择 员工ID,
    名字,
    姓氏,
    sum(salary_amt) assalary_in_month
    来自
    工资
    在 s.empID=e.empID 上加入员工 e
    在哪里
    月(salary_month)=2
    和年(salary_month)=2014
    按 empID 分组
    按总和排序(salary_amt) desc
    限制1

    【讨论】:

      【解决方案3】:
      select first_name+' '+last_name as Name 
      from Employee e
          join Salary s
              On s.EmpId = e.EmpId
                 and salary_Month = 'Feb 2014'
                 and cast(s.Salary_amt as money) =
                    (Select Max(cast(Salary_amt as money)) 
                     from salary
                     Where salary_Month = 'Feb 2014')
      

      注意:Salary.Salary_month 和 Salary.empId 上应该有一个唯一的备用复合键。

      【讨论】:

      • 我不太确定这是否可行。我的意思是,除了 salary_amt 是一个 varchar 并且 salary_month 是一个日期之外,where 条件使它看起来像是在计算每个员工的最高工资
      • @Lamak,是的,很好,谢谢!我已编辑以更正此问题。
      【解决方案4】:

      感谢各位朋友的回答。我将salary_amt 的数据类型更改为金钱,工作答案是:

      select top(1)first_name+' '+last_name as Name 
      from Employee e
      join Salary s
      On s.EmpId = e.EmpId
      and salary_Month = 'Feb 2014' order by salary_amt desc
      

      【讨论】:

        【解决方案5】:

        Empp 有两列 = id,name
        Salary 有四列 = sal_id,id,sal,month

        设给定月份为“一月”

        SELECT E1.name, S1.sal FROM Empp E1 INNER JOIN salary S1 ON E1.id = S1.id where 
        S1.sal = (select max(S2.sal) from Salary S2
        where S2.month='jan');
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-12-20
          • 1970-01-01
          • 2020-02-14
          • 2015-11-20
          • 1970-01-01
          • 2021-01-03
          • 1970-01-01
          相关资源
          最近更新 更多