【问题标题】:How would I find the second largest salary from the employee table? [closed]我如何从员工表中找到第二大的薪水? [关闭]
【发布时间】:2011-01-10 17:49:04
【问题描述】:

如何从 Employee 表中的所有员工中查询第二高的薪水?

【问题讨论】:

    标签: sql mysql sql-server-2005


    【解决方案1】:

    试试这个:

    SELECT max(salary)
    FROM emptable
    WHERE salary < (SELECT max(salary)
                    FROM emptable);
    

    【讨论】:

    • 上面给出了第二大的值,假设如果我有多个第二大的值,满足上述要求的查询修改将是什么。例如,我的 sal 列表如下 200,100,100,90,因此查询将导致 100,而不是 100,100。那么实现这一点的修改是什么。
    【解决方案2】:

    简单回答:

    SELECT distinct(sal)
    FROM emp
    ORDER BY sal DESC
    LIMIT 1, 1;
    

    你只会得到第二个最高薪水。

    如果您需要任何第 3 或第 4 或第 N 个值,您可以增加第一个值,然后是 LIMIT (n-1) 即。第四薪:LIMIT 3, 1;

    【讨论】:

    • 如果您有 2 条工资相同的记录,这需要工作。它想给你第二个最大值。
    • @mukeshpatel distinct 需要应用感谢您指出这一点。
    • 短而大
    • @mukeshpatel 感谢您的指出
    【解决方案3】:

    大多数其他答案似乎都是特定于数据库的。

    一般的SQL查询应该如下:

    select
       sal 
    from
       emp a 
    where
       N = (
          select
             count(distinct sal) 
          from
             emp b 
          where
             a.sal <= b.sal
       )
    where
       N = any value
    

    而且这个查询应该能够在任何数据库上工作。

    【讨论】:

    • 优秀答案+1
    【解决方案4】:

    尝试类似:

    SELECT TOP 1 compensation FROM (
      SELECT TOP 2 compensation FROM employees
      ORDER BY compensation DESC
    ) AS em ORDER BY compensation ASC
    

    基本上:

    • 按降序查找前 2 名的薪水。
    • 在这 2 个中,按升序查找最高薪水。
    • 所选值为第二高的薪水。

    如果工资不明确,您可以使用SELECT DISTINCT TOP ... 代替。

    【讨论】:

    • 当超过 1 名员工获得 TOP 1 薪酬时,此查询将返回错误结果。
    • 如果工资不明显,您可以使用SELECT DISTINCT TOP...
    【解决方案5】:

    也许你应该使用DENSE_RANK

    SELECT *
    FROM (
           SELECT
             [Salary],
             (DENSE_RANK()
             OVER
             (
               ORDER BY [Salary] DESC)) AS rnk
           FROM [Table1]
           GROUP BY [Num]
         ) AS A
    WHERE A.rnk = 2
    

    【讨论】:

    • 用 DENSE_RANK() 替换 RANK() 就可以了。
    • 我已经相应地更改了查询
    • 取决于在平手的情况下是否将最高薪水视为第二高。在这种情况下,应该使用 ROW_NUMBER() 代替(RANK() 在这种情况下不会返回 2,DENSE_RANK() 会,但它实际上是第三高的薪水)。
    【解决方案6】:

    要从员工那里找到第二个最高工资,

    SELECT MAX(salary) FROM employee
    WHERE salary NOT IN (
        SELECT MAX (salary) FROM employee
    )
    

    要查找员工的第一和第二个最高工资,

    SELECT salary FROM (
        SELECT DISTINCT(salary) FROM employee ORDER BY salary DESC
    ) WHERE rownum<=2
    

    这个查询工作正常,因为我用过

    【讨论】:

    • 事实上,如果你有一个表:1. 100 2. 100 3. 50 你的查询将返回 null,在这种情况下这是不正确的答案
    【解决方案7】:
    select max(Emp_Sal) 
    from Employee a
    where 1 = ( select count(*) 
             from Employee b
             where b.Emp_Sal > a.Emp_Sal)
    

    是的跑男。

    【讨论】:

      【解决方案8】:

      //选择薪水第二高的员工姓名

      SELECT name
      FROM employee WHERE salary =
             (SELECT MIN(salary) FROM 
                   (SELECT TOP (2) salary
                    FROM employee
                    ORDER BY salary DESC) )
      

      【讨论】:

        【解决方案9】:
        select distinct(t1.sal) 
        from emp t1 
        where &n=(select count(distinct(t2.sal)) from emp t2 where t1.sal<=t2.sal);
        

        输出: 输入 n 的值:如果要第二高,请输入 2;如果要 5,请输入 n=3

        【讨论】:

          【解决方案10】:

          试试这个:

          SELECT
              salary,
              employeeid
          FROM
              employees
          ORDER BY
              salary DESC
          LIMIT 2
          

          那么就获取第二行。

          【讨论】:

          • 如果前两个工资相同怎么办?
          【解决方案11】:
             select * from compensation where Salary = (
                select top 1 Salary from (
                select top 2 Salary from compensation 
                group by Salary order by Salary desc) top2
                order by Salary)
          

          这将为您提供所有行第二高薪水,少数人可能会分享

          【讨论】:

            【解决方案12】:
                select max(Salary) from Employee 
            where Salary
             not in (Select Max(Salary) from Employee)
            

            【讨论】:

              【解决方案13】:
              select max(Salary) from Employee 
              where Salary
                not in (Select top4 salary from Employee);
              

              因为答案如下

              最大(5,6,7,8)

              所以将显示第 5 高的记录,前四个将不被考虑

              【讨论】:

                【解决方案14】:
                select max(sal) from emp
                where sal not in (select max(sal) from emp )
                

                select max(salary) from emp table 
                where sal<(select max(salary)from emp)
                

                【讨论】:

                  【解决方案15】:

                  试试这个:

                  select max(Emp_Sal) 
                  from Employee a
                  where 1 = ( select count(*) 
                           from Employee b
                           where b.Emp_Sal > a.Emp_Sal)
                  

                  【讨论】:

                  • 如果有重复的工资,这不起作用。假设有三个相同的最高薪水 30000,而您找到的是第二高的。
                  【解决方案16】:
                  select * from emp 
                  where sal=(select min(sal) from 
                  (select sal from(select distinct sal from emp order by sal desc)
                  where rownum<=n));
                  

                  n可以是你想看到的值......

                  你可以看到薪水第 n 高的那个人的所有字段*强文本*

                  【讨论】:

                    【解决方案17】:
                    SELECT
                        TOP 1 salary
                    FROM
                        (
                            SELECT
                                TOP 2 salary
                            FROM
                                employees
                        ) sal
                    ORDER BY
                        salary DESC;
                    

                    【讨论】:

                      猜你喜欢
                      • 2011-01-30
                      • 2014-02-26
                      • 2014-09-02
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2011-12-20
                      • 1970-01-01
                      相关资源
                      最近更新 更多