Erreur avec la fonction MAX()

MainCore -  
chico200987 Messages postés 856 Statut Membre -
Bonjour,
Je cherche actuellement à obtenir un salaire maximum dans une table que j'ai créée. Voici le code pour ajouter la table en question:

create table pilote (
numPilote number(5),
nomPilote varchar2(25),
salaire number(8,2),
commission number(4),
dateEmbauche(5));

D'après ce que j'ai pu lire, la fonction pour trouver facilement un maximum est la fonction MAX().
J'ai donc écrit la requête suivante sachant que j'aimerais quelle retourne le numéro du pilote (numPilote) qui a donc le salaire le plus élevé.

select numPilote, max(salaire) from pilote;

Mais j'ai le droit à une belle erreur :

ORA-00937: not a single-group group function

J'ai essayé de reproduire parfaitement l'exemple de ce site
(http://sql.sh/fonctions/agregation/max) malheureusement j'obtiens la même erreur.
Savez vous d'où cela peut venir ?

Merci d'avance ! :-)

A voir également:

2 réponses

chico200987 Messages postés 856 Statut Membre 144
 
Salut,

Un moyen de résoudre ton problème est de passer par une requête imbriquée de ce type :

SELECT numPilote, salaire FROM pilote
WHERE salaire = (SELECT max(salaire) FROM pilote)
0
seabust Messages postés 811 Statut Membre 101
 
Cette requête n'a pas de sens pour moi, visiblement elle ne ressemble à aucune des requêtes qui sont sur le lien que tu as donné.

En fait numPilote renvoie une ligne par pilote et max(salaire) renvoie seulement une seule ligne cela n'a pas de sens car ton tableau reésultat contiendrait une colonne avec plein de lignes et une autre avec une seule ligne.

Pour résoudre ton problème je te propose une autre approche. On prends tous les pilotes, on les trie par salaire et on prend le premier.

Cela se fait de cette façon.

SELECT numPilote FROM pilote ORDER BY salaire LIMIT 0,1
0
chico200987 Messages postés 856 Statut Membre 144
 
Un problème se pose si deux pilotes ont le même salaire max, il n'aura qu'un seul pilote au lieu de tous ayant le même salaire..
0
seabust Messages postés 811 Statut Membre 101
 
Je sais bien mais dans la mesure où dans sa requête il y a un max(), cela signifie qu'il y aura donc une seule ligne dans le résultat, j'ai donc construit une requête qui satisfasse cette contrainte.
0
chico200987 Messages postés 856 Statut Membre 144
 
Le max renvoi certes une seule et unique ligne mais ce n'est peut-être pas ce qu'il veut, malgré ses propos (tout au singulier), puisqu'il semble mal l'utiliser :/

A voir en fonction de ses besoins réels..
0
seabust Messages postés 811 Statut Membre 101
 
Je ne peut pas savoir ce qu'il veux dans la mesure où il ne l'a pas explicité, de toute façon avec nos deux réponses il a les deux possibilités, il faut donc attendre.
0
chico200987 Messages postés 856 Statut Membre 144
 
Exactement :)
0