Découvrez la nième plus haut salaire de la table
name salary
----- -----
mohan 500
ram 1000
dinesh 5000
hareesh 6000
mallu 7500
manju 7500
praveen 10000
hari 10000
Comment pourrais-je trouver la nième plus haut salaire à partir du tableau ci-dessus à l'aide d'Oracle?
- L'utilisation de RANG ou de DENSE_RANK, quoi de plus approprié pour votre cas.
Vous devez vous connecter pour publier un commentaire.
vous pouvez utiliser quelque chose comme ça.. c'est ce que j'ai testé et ensuite collés ici
en place de 'tblname' donner le nom de votre table et ensuite en place nième donner de votre choix nième plus haut salaire que vous souhaitez
vous pouvez le voir dans la capture d'écran qu'il fonctionne.
passer votre salaire nombre à la place de "n-ième"
Cet article parle de cette question en profondeur, et je vais citer le code ci-dessous: (Note: voir le bas 2 solutions pour Oracle)
Solution 1: Ce SQL pour trouver le n-ième plus haut salaire doit travailler dans SQL Server, MySQL, DB2, Oracle, Teradata, et presque tous les autres SGBDR: (remarque: les faibles performances en raison de la sous-requête)
La chose la plus importante à comprendre dans la requête ci-dessus est que la sous-requête est évaluée chaque fois qu'une ligne est traitée par la requête externe. En d'autres termes, à l'intérieur de la requête ne peut être traitée indépendamment de la requête externe depuis l'intérieur de la requête utilise la Emp1 valeur.
Afin de trouver le n-ième plus haut salaire, nous retrouvons le salaire qui a exactement N-1 les salaires supérieurs à lui-même.
Solution 2: Trouver le n-ième plus haut salaire de l'aide de la TOP mot-clé dans SQL Server
Solution 3: Trouver le n-ième plus haut salaire dans SQL Server sans utiliser de HAUT
Noter que je n'ai pas personnellement testé SQL ci-dessus, et je crois qu'il ne fonctionne que dans SQL Server 2012.
Solution 4: Travaille dans MySQL
La clause LIMIT prend deux arguments dans cette requête – le premier argument spécifie le décalage de la première ligne pour le retour, et le second indique le nombre maximal de lignes à retourner.
Solution 5: Travaille dans Oracle
Solution 6: Travaille dans Oracle 2
Général requête pour l'ensemble de la Base de données
Remplacer n par le nombre donné.
par exemple, pour obtenir le 3ème plus haut salaire
OU
dans tout langage de programmation
select * from emp order by salaire
parcourir l'ensemble des résultats dans un langage de programmation (JAVA, .net ou php)
Mysql
Que vous ayez ajouté à votre question Oracle de sorte que vous pouvez simplement utiliser le
NTH_VALUE()
fonction... c'est une fonction analytique, malheureusement, mais votre requête devrait être simplifiée:SQL Violon
De 12c d'Oracle enfin captures avec le reste du monde et comprend DÉCALAGE de sorte que vous pourriez utiliser ceci à la place:
DÉCLARER M INT;
ENSEMBLE M=N-1;
SELECT DISTINCT de Salaire DE l'Employé
COMMANDE PAR Salaire DESC LIMIT M,1;
Vous pouvez trouver beaucoup de choses sur google
Sélectionnez la n-ième plus haut salaire dans une façon simple
Où n = le n-ième nombre u veux.....
Consulter requête suivante pour obtenir la n-ième plus haut salaire. Par cette façon, vous obtenez nième plus haut salaire. Si vous souhaitez obtenir nième plus bas salaire seulement vous avez besoin de remplacer DESC par l'ASC dans la requête.
Dans MySql, exécutez le SQL ci-dessous pour trouver nième plus haut salaire:
e.g Trouver 3e plus haut salaire:
e.g Trouver 3e plus bas salaire (faire "order by asc"):
Dans Sql server 2012 et au-dessus. Veuillez Consulter ce lien pour Fetch, le Décalage, la Page de Sql server
Regardez ici
Essayer suivantes dans Oracle:
Cheers!
Nous pouvons le faire par une sous-requête corrélée.
Pour de plus amples connaissances veuillez consulter ce lien..
Sous-Requête en corrélation avec exemple
select distinct salaire de emp_table ordre par le salaire desc limit n-1,1;
Il réussit plutôt bien dans Oracle. Vous pouvez utiliser
ROW_NUMBER()
fonction au lieuDENSE_RANK
mais il ne sélectionne qu'un seul enregistrement ou ligne pour le salaire le plus élevé, même s'il y a deux ou plusieurs employés ayant de l'égalité de salaire.