comment faire pour récupérer le plus élevé et le plus bas salaire de la suite de la table?
J'ai employé le tableau
EMP_ID | F_NAME | L_NAME | SALARY | JOINING_DATE | DEPARTMENT
-----------------------------------------------------------------------------------
101 | John | Abraham | 100000 | 01-JAN-14 09.15.00.000000 AM | Banking
102 | Michel | Clarke | 800000 | | Insaurance
102 | Roy | Thomas | 70000 | 01-FEB-13 12.30.00.000000 PM | Banking
103 | Tom | Jose | 600000 | 03-FEB-14 01.30.00.000000 AM | Insaurance
105 | Jerry | Pinto | 650000 | 01-FEB-13 12.00.00.000000 PM | Services
106 | Philip | Mathew | 750000 | 01-JAN-13 02.00.00.000000 AM | Services
107 | TestName1 | 123 | 650000 | 01-JAN-13 12.05.00.000000 PM | Services
108 | TestName2 | Lname% | 600000 | 01-JAN-13 12.00.00.000000 PM | Insaurance
je veux trouver le plus haut et le plus bas salaire a partir du tableau ci-dessus dans oracle sql.
si je ne
select max(salary) from (select * from (select salary from employee) where rownum <2);
il retourne MAX(SALARY)
= 100000
où il doit retourner 800000
Si je ne
select max(salary)
from (select * from (select salary from employee)
where rownum <3);
il retourne MAX(SALARY)
= 800000
Si je ne
select min(salary)
from (select * from(select salary from employee)
where rownum < 2);
il sera de retour MIN(SALARY)
= 100000
où il doit retourner 70000
.
Ce qui est mauvais dans cette requête?
ce que devrait être la bonne question?
- Quel est le type de données sur la colonne de salaire? Avez-vous besoin de to_number() il?
- Remarque: l'utilisation de
rownum
filtres sansorder by
clauses est généralement, si pas toujours, un bug. - ROWNUM ne permettra pas d'assurer l'ordre des lignes retournées. C'est juste un pseudo et de colonne est affectée après les lignes sont retournées. Et sans un
ORDER BY
il n'y a pas de garantie de l'ordre et les lignes sont retournées au hasard. Voir stackoverflow.com/a/30321788/3989608 - Vous devez choisir les bonnes réponses si ils vous ont aidé. Vous n'êtes pas de donner aux gens qui répondre à vos questions, tout crédit pour le moment.
Vous devez vous connecter pour publier un commentaire.
Vous n'avez pas besoin de tous ces sous-requêtes:
SQL Violon
Oracle 11g R2 Schéma d'Installation:
Requête 1 - trouver le plus n des salaires:
Résultats:
Requête 2 - Pour trouver les plus bas salaires n:
Résultats:
Pour chaque ligne retournée par une requête, le ROWNUM pseudo-colonne renvoie un nombre indiquant l'ordre dans lequel Oracle sélectionne la ligne à partir d'une table ou d'un ensemble de lignes jointes. La première ligne sélectionnée a un numéro de rangée de 1, la seconde 2, et ainsi de suite.
Donc dans votre cas :
Cette requête sera de retour
seulement cette ligne de sortie... et donc la valeur maximale sera de 100000 seulement.
Cette requête tak 2 premières lignes de votre table, c'est à dire,
et donc le max le salaire de 800000.
De même,
ne sélectionnez la 1ère ligne
donc min le salaire de 100000.
P. S. : Vous pouvez simplement écrire vos requêtes comme ceci :
où n sera ROWNUM à laquelle vous souhaitez limiter le nombre de lignes renvoyées par la requête
ORDER BY
il n'y a pas de garantie de l'ordre et les lignes sont retournées au hasard. Voir stackoverflow.com/a/30321788/3989608Essayer:
si vous voulez le 2ème plus haut et le 2e plus bas salaire? Check this out