web-dev-qa-db-fra.com

Trouver le salaire maximum et le salaire maximum pour un employé MySQL

Supposons que vous receviez la table de base de données simple suivante, appelée Employé et comportant 2 colonnes, appelée ID d'employé et salaire:

  Employee
  Employee ID    Salary
   3            200
   4            800
   7            450

Je souhaite rédiger une requête en sélectionnant max (salaire) sous la forme max_salary, 2nd_max_salary from employee

alors il devrait revenir

  max_salary   2nd_max_salary
   800             450

je sais comment trouver le deuxième salaire le plus élevé 

   SELECT MAX(Salary) FROM Employee
  WHERE Salary NOT IN (SELECT MAX(Salary) FROM Employee )

ou pour trouver le n 

  SELECT FROM Employee Emp1 WHERE (N-1) = ( SELECT COUNT(DISTINCT(Emp2.Salary)) FROM Employee Emp2
  WHERE Emp2.Salary > Emp1.Salary)

mais je suis incapable de comprendre comment joindre ces 2 résultats pour le résultat souhaité

24
dpsdce

Vous pouvez simplement exécuter 2 requêtes en tant que requêtes internes pour renvoyer 2 colonnes:

select
  (SELECT MAX(Salary) FROM Employee) maxsalary,
  (SELECT MAX(Salary) FROM Employee
  WHERE Salary NOT IN (SELECT MAX(Salary) FROM Employee )) as [2nd_max_salary]

Démo SQL Fiddle

35
Szymon

Essayez comme ça

SELECT (select max(Salary) from Employee) as MAXinmum),(max(salary) FROM Employee WHERE salary NOT IN (SELECT max(salary)) FROM Employee);

(Ou)

Essayez ceci, n serait le nième élément que vous voudriez retourner.

 SELECT DISTINCT(Salary) FROM table ORDER BY Salary DESC LIMIT n,1

Dans ton cas

 SELECT DISTINCT(column_name) FROM table_name ORDER BY column_name DESC limit 2,1;
17
Vignesh Kumar A

Le moyen le plus simple d'obtenir le deuxième salaire maximum et le dernier salaire

select 
 DISTINCT(salary) 
from employee 
 order by salary desc 
limit 1,1

Remarque:

limit 0,1  - Top max salary

limit 1,1  - Second max salary

limit 2,1  - Third max salary

limit 3,1  - Fourth max salary
10
Swapnil Kumbhar

La solution la meilleure et la plus simple: - 

 SELECT
    max(salary)
FROM
    salary
WHERE
    salary < (
        SELECT
            max(salary)
        FROM
            salary
    );
8
Abhishek Sarkar

Vous pouvez écrire 2 sous-requêtes comme dans cet exemple

SELECT (select max(Salary) from Employee) as max_id, 
     (select Salary from Employee order by Salary desc limit 1,1) as max_2nd 
3
Yogesh Suthar

Je pense que c’est le moyen le plus simple de trouver MAX et deuxième MAX Salary.Vous pouvez essayer de cette façon.

SELECT MAX(Salary) FROM Employee; -- For Maximum Salary.

SELECT MAX(Salary) FROM Employee WHERE Salary < (SELECT MAX(Salary) FROM Employee); -- For Second Maximum Salary
2
Md. Rezwanul Haque
$q="select * from info order by salary desc limit 1,0"; // display highest 2 salary

ou

$q="select * from info order by salary desc limit 1,0"; // display 2nd highest salary
2
Ahmed Januhasan

essaye ça

select max(salary) as first, 
       (select salary from employee order by salary desc limit 1, 1) as second 
from employee limit 1
1
Aswad Shaik

je pense que la manière simple dans Oracle est la suivante:

SELECT Salary FROM
(SELECT DISTINCT Salary FROM Employee ORDER BY Salary desc)
WHERE ROWNUM <= 2;
1
Hamidreza
`select max(salary) as first, (select salary from employee order by salary desc limit 1, 1) as second from employee limit 1`

Pour un salaire maximum, nous pouvons simplement utiliser la fonction max, mais en second lieu, nous devrions utiliser une requête secondaire. dans la sous-requête, nous pouvons utiliser la condition where pour vérifier le deuxième salaire maximum ou simplement utiliser la limite.

1
Kaja Mydeen

Trouver le salaire maximum d'un employé

SELECT MAX(Salary) FROM Employee

Trouver le deuxième salaire le plus élevé 

SELECT MAX(Salary) FROM Employee 
Where Salary Not In (Select MAX(Salary) FROM Employee)

OR

SELECT  MAX(Salary) FROM Employee
WHERE Salary <> (SELECT MAX(Salary) FROM Employee )

Trouvez Nème Max Salaire et pour plus de détails www.gurujipoint.com

1
Jatin Phulera

Vous pouvez écrire une requête SQL dans n’importe quelle de vos bases de données préférées, par exemple. MySQL , Microsoft SQL Server ou Oracle . Vous pouvez également utiliser une fonctionnalité spécifique à la base de données, par exemple TOP, LIMIT ou ROW_NUMBER pour écrire une requête SQL, mais vous devez également fournir une solution générique qui devrait fonctionner sur toutes les bases de données. En fait, il existe plusieurs façons de trouver le deuxième salaire le plus élevé et vous devez en connaître quelques-unes, par exemple. dans MySQL sans utiliser le mot cléLIMIT, dans SQL Server sans utiliserTOPet dans Oracle sans utiliserRANKetROWNUM.

Requête SQL générique:

SELECT
    MAX(salary)
FROM
    Employee
WHERE
    Salary NOT IN (
        SELECT
            Max(Salary)
        FROM
            Employee
    );

Une autre solution qui utilise une sous-requête au lieu de la clause NOT IN. Il utilise l'opérateur <.

SELECT
    MAX(Salary)
FROM
    Employee
WHERE
    Salary < (
        SELECT
            Max(Salary)
        FROM
            Employee
    );
1
Faisal
select * from emp where sal =(select max(sal) from emp where eno in(select eno from emp where sal <(select max(sal)from emp )));

essayez le code ci-dessus ....

si vous voulez le troisième enregistrement max, ajoutez une autre requête imbriquée "select max (sal) from emp" dans le crochet de la dernière requête et indiquez l'opérateur less devant lui.

0
Riyaz Khan

C'est une requête géniale pour trouver le nième maximum: Par exemple: - 

  1. Vous voulez trouver le salaire 8ème ligne Salaire, Il suffit de changer la valeur indexée à 8.

  2. Supposons que vous avez 100 lignes avec Salary. Maintenant, vous voulez trouver le salaire Max pour la 90e rangée. Vient de changer la valeur indexée à 90.

    set @n:=0;
    select * from (select *, (@n:=@n+1) as indexed from employee order by Salary desc)t where t.indexed = 1;
    
0
Moudud Hossain

Si nous voulons trouver un employé qui obtient le 3ème salaire le plus élevé, alors exécutez cette requête

SELECT a.employeeid, 
       a.salary 
FROM  (SELECT employeeid, 
              salary, 
              Dense_rank() 
                OVER( 
                  ORDER BY salary) AS n 
       FROM   employee) AS a 
WHERE  n = 3 

Qu'est-ce que tu veux 

0
Singh Kailash

Les 3 salaires les plus élevés à mysql

SELECT Salary FROM (SELECT DISTINCT Salary FROM Employee ORDER BY Salary desc) AS custom LIMIT 3;

Le plus élevé des salaires dans mysql

SELECT Salary FROM (SELECT DISTINCT Salary FROM Employee ORDER BY Salary desc) AS custom LIMIT n;
0
Sanjoy Kanrar

Pour le deuxième salaire le plus élevé, celui-ci me convient:

SELECT salary
FROM employee
WHERE salary 
NOT IN (
SELECT MAX( salary ) 
FROM employee
ORDER BY salary DESC
)
LIMIT 1
0
Dinesh

Ici, changez la valeur n en fonction de vos besoins:

SELECT top 1 amount 
FROM ( 
    SELECT DISTINCT top n amount 
    FROM payment 
    ORDER BY amount DESC ) AS temp 
ORDER BY amount
0
Vipin Pandey
select * from
  Employees where Sal >=
  (SELECT
    max(Sal)
FROM
    Employees
WHERE
    Sal < (
        SELECT
            max(Sal)
        FROM
            Employees; 
    ));
0
sachin

Cela fonctionnera Pour trouver le nième nombre maximum

SELECT 
    TOP 1 * from (SELECT TOP  nth_largest_no * FROM Products Order by price desc) ORDER BY price asc;

Pour le cinquième plus grand nombre

SELECT 
  TOP 1 *  from (SELECT TOP  5 * FROM Products Order by price desc) ORDER BY price asc;
0
Faizal R

Essayer

SELECT 

   SUBSTRING( GROUP_CONCAT( Salary ), 1 , LOCATE(",", GROUP_CONCAT( Salary ) ) -1 ) AS max_salary,

   SUBSTRING( GROUP_CONCAT( Salary ), LOCATE(",", GROUP_CONCAT( Salary ) ) +1 ) AS second_max_salary

FROM 
   (
     SELECT Salary FROM `Employee` ORDER BY Salary DESC LIMIT 0,2
   ) a

Démo ici

0
Nouphal.M

avec expression de table commune

With cte as (
 SELECT 
   ROW_NUMBER() Over (Order By Salary Desc) RowNumber, 
   Max(Salary) Salary 
 FROM
     Employee
 Group By Salary
)

Select * from cte where RowNumber = 2
0
dnxit

Essayez ci-dessous Query, travaillait pour moi pour trouver le Nème salaire le plus élevé . Il suffit de remplacer votre numéro par nth_No

Select DISTINCT TOP 1 salary
from 
(Select DISTINCT TOP *nth_No* salary
from Employee
ORDER BY Salary DESC)
Result
ORDER BY Salary
0
Prashant Pimpale

sans requête imbriquée

select max(e.salary) as max_salary, max(e1.salary) as 2nd_max_salary 
from employee as e
left join employee as e1 on e.salary != e1.salary
group by e.salary desc limit 1;
0
Balakrishnan

Cette solution donnera à tous les employés et au salaire qui ont le deuxième salaire le plus élevé

SELECT name, salary
FROM employee
WHERE salary = (
    SELECT 
        salary
    FROM employee AS emp
    ORDER BY salary DESC
    LIMIT 1,1
);
0
Singhak

Cela devrait fonctionner pareil:

SELECT MAX(salary) max_salary,
  (SELECT MAX(salary)
   FROM Employee
   WHERE salary NOT IN
       (SELECT MAX(salary)
        FROM Employee)) 2nd_max_salary
FROM Employee
0
Sanchit Gupta

Pour les salaires uniques (le premier ne peut pas être identique au second):

SELECT
  MAX( s.salary ) AS max_salary,
  (SELECT
     MAX( salary ) 
   FROM salaries
   WHERE salary <> MAX( s.salary ) 
   ORDER BY salary DESC 
   LIMIT 1
  ) AS 2nd_max_salary
FROM salaries s

Et aussi parce que c'est un moyen inutile de résoudre ce problème (quelqu'un peut-il dire 2 lignes au lieu de 2 colonnes, LOL?)

0
omgitsfletch

Salaire Max:  

select max(salary) from tbl_employee <br><br>

Second Max Salary:  

select max(salary) from tbl_employee where salary < ( select max(salary) from tbl_employee);
0
Kamran

select e.salary from( SELECT * FROM Employee group by salary order by salary desc limit 2 ) e order by salary asc limit 1;

0
Anugrah

Pas vraiment une belle requête mais:

SELECT * from (
    SELECT max(Salary) from Employee
    ) as a
LEFT OUTER JOIN 
    (SELECT MAX(Salary) FROM Employee
        WHERE Salary NOT IN (SELECT MAX(Salary) FROM Employee )) as b
ON 1=1
0
codeKonami

Voici une autre solution qui utilise une sous-requête mais au lieu de la clause IN, elle utilise <operator

SELECT MAX(Salary) From Employees WHERE Salary < ( SELECT Max(Salary) FROM Employees);
0
Braj Kishor Sah