Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/12/2010, 12h32   #1
Modérateur
 
Avatar de sebhm
 
Homme Seb
Développeur Web
Inscription : avril 2004
Messages : 1 063
Détails du profil
Informations personnelles :
Nom : Homme Seb
Âge : 31
Localisation : France, Landes (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : avril 2004
Messages : 1 063
Points : 1 181
Points : 1 181
Par défaut valeur max et son nom

Bonjour,

j'ai une table qui contient 2 champs : nom et valeur.
Je veux récupérer le nom de la valeur max.

j'ai toujours fait cela avec une sous-requete :
Code :
1
2
3
SELECT nom 
FROM ma_table 
WHERE valeur=(SELECT MAX(valeur) FROM ma_table)
et je me demandais si j'avais raison d'utiliser cette sous-requete ou si il n'y a pas un moyen plus simple de faire cela.

merci de vos lumieres.
(je suis sous MySQL)
sebhm est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2010, 17h55   #2
Membre expérimenté
 
Inscription : octobre 2002
Messages : 654
Détails du profil
Informations forums :
Inscription : octobre 2002
Messages : 654
Points : 552
Points : 552
Bonjour,
Ta méthode est à mon sens la plus portable.
Si valeur est unique dans ma_table, tu peux aussi utiliser un
Code :
1
2
3
4
SELECT nom 
FROM ma_table 
ORDER BY valeur DESC
LIMIT 1
mais si tu peux avoir plusieurs lignes correspondant au max, tu n'obtiendras pas le même résultat.
Je ne suis pas sure de la syntaxe du limit car je n'ai jamais utilisé mysql.
Il y a aussi les fonctions de fenêtrage mais là je ne peux rien t'expliquer car
-je ne les connais que de nom
-je ne suis pas sure qu'elles sont utilisables avec mysql
-je ne suis pas sure non plus qu'elles soient applicables dans ton contexte, même s'il me semble qu'elles sont appropriées.
Cordialement
Soazig
soazig est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 23h13   #3
Membre du Club
 
Inscription : août 2009
Messages : 66
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 66
Points : 69
Points : 69
Pour la clause LIMIT, il faut indiquer l'offset (0) et le nombre de lignes (1)

Code :
1
2
3
4
5
6
7
8
 
SELECT
  nom 
FROM 
  ma_table 
ORDER BY
  valeur DESC
LIMIT 0,1
NicoD. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2010, 09h11   #4
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 979
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 979
Points : 18 224
Points : 18 224
Envoyer un message via MSN à CinePhil
LIMIT [nb de lignes souhaitées] est suffisant si on ne veut garder que les premières lignes retournées par la requête.

Citation:
Envoyé par Doc MySQL
  • La clause LIMIT peut être utilisée pour limiter le nombre d'enregistrements retournés par la commande SELECT. LIMIT accepte un ou deux arguments numériques. Ces arguments doivent être des entiers constants.
    Avec un argument, la valeur spécifie le nombre de lignes à retourner depuis le début du jeu de résultat. Si deux arguments sont donnés, le premier indique le décalage du premier enregistrement à retourner, le second donne le nombre maximum d'enregistrement à retourner. Le décalage du premier enregistrement est 0 (pas 1) :
    Pour être compatible avec PostgreSQL, MySQL supporte aussi la syntaxe : LIMIT row_count OFFSET offset.
    mysql> SELECT * FROM table LIMIT 5,10; # Retourne les enregistrements 6 à 15
    Pour obtenir tous les enregistrement d'un certain décalage jusqu'à la fin du résultat, vous pouvez utiliser de grands entier en tant que second paramètre :
    mysql> SELECT * FROM table LIMIT 95,18446744073709551615; # Retourne les enregistrements de 96 jusqu'au dernier.
    Si un seul argument est donné, il indique le nombre maximum d'enregistrements à retourner :
    mysql> SELECT * FROM table LIMIT 5; # Retourne les 5 premiers enregistrements
    Autrement dit, LIMIT n est équivalent à LIMIT 0,n.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2010, 11h02   #5
Membre du Club
 
Inscription : août 2009
Messages : 66
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 66
Points : 69
Points : 69
Merci pour l'info, je n'avais pas idée que cette notation puisse être possible.

A titre personnel, je trouve d'ailleurs la notation "LIMIT row_count OFFSET offset" beaucoup plus facile à lire que "LIMIT offset, row_count". Je me demande si je ne vais pas la privilégier à l'avenir.
NicoD. est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h42.


 
 
 
 
Partenaires

Hébergement Web