Requete en fonction du max
Résolu
lefadrine
Messages postés
28
Date d'inscription
Statut
Membre
Dernière intervention
-
P@t@ch0n Messages postés 565 Date d'inscription Statut Membre Dernière intervention -
P@t@ch0n Messages postés 565 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
voilà mon problème : j'aimerais récupérer les tuples de cette table en fonction du max de la valeur pour chaque code concerné. Comme un exemple vaut mieux qu'un bon discours !
Je souhaiterais obtenir comme résultat les tuples suivants :
J'ai essayé avec la requête suivante :
Je ne vois vraiment pas comment faire...
Merci d'avance pour vos réponses.
voilà mon problème : j'aimerais récupérer les tuples de cette table en fonction du max de la valeur pour chaque code concerné. Comme un exemple vaut mieux qu'un bon discours !
id code valeur ---------------------------- 1 545 18 2 545 18 3 545 22 4 545 22 5 600 3 6 600 13 7 700 69 8 700 13
Je souhaiterais obtenir comme résultat les tuples suivants :
id code valeur ----------------------------- 3 545 22 4 545 22 6 600 13 7 700 69
J'ai essayé avec la requête suivante :
SELECT * FROM table WHERE valeur IN (SELECT MAX(valeur) FROM table GROUP BY code)Mais le problème est que j'obtiens le tuple "700-13" en plus, en effet la requete prend en compte tous les max pour chaque code, et comme 13 est un max déjà pour le code 600, je me retrouve donc avec le couple "700 - 13" en plus.
Je ne vois vraiment pas comment faire...
Merci d'avance pour vos réponses.
A voir également:
- Requete en fonction du max
- Fonction si et - Guide
- Driver max - Télécharger - Pilotes & Matériel
- I14 pro max - Accueil - Guide téléphones
- Fonctionnement du protocole http - Guide
- Max ou netflix - Accueil - Streaming
20 réponses
La soltuion est dans la documentaion ;)
https://dev.mysql.com/doc/refman/8.0/en/example-maximum-column-group-row.html
https://dev.mysql.com/doc/refman/8.0/en/example-maximum-column-group-row.html
lefadrine
Messages postés
28
Date d'inscription
Statut
Membre
Dernière intervention
11
merci beaucoup c'est exactement ça. La requête est donc :
salut essai un distinct devant max mais je ni crois pas tro la synthax devrais passer mais pas sur pour le resultat
Merci bien mais non, en fait le distinct ne sert à rien ici. Le group by dans la 2eme requete élimine déjà les tuples redondants, car par définition il les regroupe en fonction du max de la valeur...
Pour répondre à ce problème, je pense qu'il faut apporter du sang neuf, càd voir la requete sous une autre forme, laquelle je n'arrive toujours pas à définir !
Pour répondre à ce problème, je pense qu'il faut apporter du sang neuf, càd voir la requete sous une autre forme, laquelle je n'arrive toujours pas à définir !
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
T1 et T2 sont des déclarations de l'objet "table". Des variables si tu préfères, qui représente la table "table".
Ici l'astuce consiste à utiliser deux "table" pour pouvoir récupérer les bonnes infos en faisant une jointure sur code entre les deux pour obtenir les bons max par code.
Ici l'astuce consiste à utiliser deux "table" pour pouvoir récupérer les bonnes infos en faisant une jointure sur code entre les deux pour obtenir les bons max par code.
Par contre moi j ai un souci avec la requete car j ai 2 valeur max identique pour la meme personne mais il me renvoi les 2 resultat voici ma requete tirer de la votre
SELECT *
FROM new T1
WHERE num=(SELECT MAX(T2.num)
FROM new T2
WHERE T1.nom = T2.nom);
merci
SELECT *
FROM new T1
WHERE num=(SELECT MAX(T2.num)
FROM new T2
WHERE T1.nom = T2.nom);
merci
oui c'est normal c'est le but recherché pour cette requête, regarde mon premier post, plus particulièrement les résultats attendus à partir de ma table de départ.
j'obtiens 2 fois le tuple "545 -22", et c'est ce que je souhaite.
A mon avis cette requête ne correspond pas à ce que tu souhaites obtenir. Donne nous un exemple pour t'aider...
j'obtiens 2 fois le tuple "545 -22", et c'est ce que je souhaite.
A mon avis cette requête ne correspond pas à ce que tu souhaites obtenir. Donne nous un exemple pour t'aider...
voici ma requete
SELECT *
FROM new
WHERE num in( SELECT MAX(num) FROM new GROUP BY nom);
si g 2 meme valeur pour num il me renvoi les 2 enregistrement peut etre normal
SELECT *
FROM new
WHERE num in( SELECT MAX(num) FROM new GROUP BY nom);
si g 2 meme valeur pour num il me renvoi les 2 enregistrement peut etre normal
Cela fonctionne très bien.
mysql> CREATE TABLE new (num INT, nom VARCHAR(20)); Query OK, 0 rows affected (0.07 sec) mysql> INSERT INTO new VALUES(10, '10-a'), (20, '20-a'), (10, '10-b'), (30, '30-a'); Query OK, 4 rows affected (0.01 sec) Records: 4 Duplicates: 0 Warnings: 0 mysql> SELECT N1.num, N1.nom FROM new N1 WHERE N1.num IN (SELECT MAX(N2.num) FROM new N2 GROUP BY N2.NUM); +------+------+ | num | nom | +------+------+ | 10 | 10-a | | 20 | 20-a | | 10 | 10-b | | 30 | 30-a | +------+------+ 4 rows in set (0.01 sec) mysql> SELECT N1.num, N1.nom FROM new N1 WHERE N1.num IN (SELECT MAX(N2.num) FROM new N2 GROUP BY N2.NUM) GROUP BY N1.num; +------+------+ | num | nom | +------+------+ | 10 | 10-a | | 20 | 20-a | | 30 | 30-a | +------+------+ 3 rows in set (0.00 sec)
voici ma requete
SELECT N1.num,N1.nom
FROM new AS N1
WHERE (((N1.num) In (SELECT MAX(N2.num) FROM new N2 GROUP BY N2.NUM)))
GROUP BY N1.num;
probleme il me dit que 'nom' ne fait pas partti de la fonction d'agregat
SELECT N1.num,N1.nom
FROM new AS N1
WHERE (((N1.num) In (SELECT MAX(N2.num) FROM new N2 GROUP BY N2.NUM)))
GROUP BY N1.num;
probleme il me dit que 'nom' ne fait pas partti de la fonction d'agregat
C'est normal, la colonne nom n'était valable que pour l'exemple que je t'ai montré, je doute que tu ais une colonne portant ce nom.
A toi de remplacer par tes propres noms de colonnes.
Sinon, évite aussi les parenthèses superflues qui ne sont que source d'erreurs.
A toi de remplacer par tes propres noms de colonnes.
Sinon, évite aussi les parenthèses superflues qui ne sont que source d'erreurs.