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é
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]
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;
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
La solution la meilleure et la plus simple: -
SELECT
max(salary)
FROM
salary
WHERE
salary < (
SELECT
max(salary)
FROM
salary
);
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
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
$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
essaye ça
select max(salary) as first,
(select salary from employee order by salary desc limit 1, 1) as second
from employee limit 1
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;
`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.
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
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
);
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.
C'est une requête géniale pour trouver le nième maximum: Par exemple: -
Vous voulez trouver le salaire 8ème ligne Salaire, Il suffit de changer la valeur indexée à 8.
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;
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
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;
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
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
select * from
Employees where Sal >=
(SELECT
max(Sal)
FROM
Employees
WHERE
Sal < (
SELECT
max(Sal)
FROM
Employees;
));
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;
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
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
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
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;
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
);
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
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?)
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);
select
e.salary
from(
SELECT * FROM
Employee
group by salary
order by salary desc
limit 2
) e
order by salary asc
limit 1;
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
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);