web-dev-qa-db-fra.com

Comment pourrais-je trouver le deuxième plus gros salaire de la table des employés?

Comment puis-je demander des informations sur le deuxième salaire en importance de tous les employés de ma table des employés?

25
Dinesh

Essaye ça:

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

Réponse simple:

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

Vous n'obtiendrez que le deuxième salaire maximum.

Et si vous avez besoin d'une 3ème, 4ème ou Nième valeur, vous pouvez augmenter la première valeur suivie de LIMIT (n-1) ie. pour le 4ème salaire: LIMIT 3, 1;

45
SandeepGodara

La plupart des autres réponses semblent être spécifiques à la base de données.

La requête SQL générale devrait être la suivante:

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

et cette requête devrait pouvoir fonctionner sur n'importe quelle base de données.

12
Dharmendra Tomar

Essayez quelque chose comme:

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

Essentiellement:

  • Trouvez les 2 meilleurs salaires par ordre décroissant.
  • Sur ces 2, trouvez le salaire le plus élevé par ordre croissant.
  • La valeur sélectionnée est le deuxième salaire le plus élevé.

Si les salaires ne sont pas distincts, vous pouvez utiliser SELECT DISTINCT TOP ... au lieu.

11
John Feminella

Peut-être devriez-vous utiliser 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
9
CoderHawk

Pour trouver le deuxième salaire maximum d'un employé,

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

Pour trouver le premier et le deuxième salaire maximum de l'employé,

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

Ces requêtes fonctionnent bien parce que j'ai utilisé

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

Oui, homme qui court.

5
brundaban sathua

// Pour sélectionner le nom de l'employé dont le salaire est le deuxième plus élevé

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

Essaye ça:

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

Ensuite, prenez juste la deuxième rangée.

4
James Black
select distinct(t1.sal) 
from emp t1 
where &n=(select count(distinct(t2.sal)) from emp t2 where t1.sal<=t2.sal);

Sortie: Entrez la valeur pour n: si vous voulez la deuxième valeur la plus élevée, entrez 2; si vous voulez 5, entrez n = 3

3
hanimi
    select max(Salary) from Employee 
where Salary
 not in (Select Max(Salary) from Employee)
2
gmhk

Essaye ça:

select max(Emp_Sal) 
from Employee a
where 1 = ( select count(*) 
         from Employee b
         where b.Emp_Sal > a.Emp_Sal)
2
vinny
   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)

qui vous donnera tous lignes avec le deuxième salaire le plus élevé, que quelques personnes peuvent partager

2
almog.ori
select max(sal) from emp
where sal not in (select max(sal) from emp )

OU

select max(salary) from emp table 
where sal<(select max(salary)from emp)
2
ScoRpion
select max(Salary) from Employee 
where Salary
  not in (Select top4 salary from Employee);

parce que la réponse est la suivante

max (5,6,7,8)

donc le 5ème record le plus élevé sera affiché, les quatre premiers ne seront pas considérés

2
vekatesh
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 peut être la valeur que vous voulez voir ......

vous pouvez voir tous les champs de la personne qui a le nième salaire le plus élevé * texte fort *

1
Rupesh
SELECT
    TOP 1 salary
FROM
    (
        SELECT
            TOP 2 salary
        FROM
            employees
    ) sal
ORDER BY
    salary DESC;
1
sonal