Bonjour,
s'il vous j'ai un problème avec une requête SQL, en fait j'ai une table qui a un même numero pour des prix differents. Mon but est de selectionner le plus petit prix de la liste de prix par series de numero tout en affichant tous les champs de la table.
voici ma table:
colis(id, frais, nomexp, telexp, nomdest, numdest, nature, numero, etat, created, modified)
ma requête est la suivante:

Ce que je fais

-dabord ceci permet davoir la petite valeur par numero : SELECT MIN(frais) as frais, numero FROM colis GROUP BY numero
-la mise ensemble pour avoir tous les champs de la table me pose un probleme
SELECT FROM colis WHERE frais in (SELECT MIN(frais) as frais FROM colis GROUP BY numero) celleci me donne la reponse de SELECT FROM COLIS
Entourez votre code pour bien le mettre en forme



### Ce que je veux

je veux obtenir tous les champs de ma table ayant pour frais le plus petit de chaque serie de numero

### Ce que j'obtiens
j'obtiens toujours la reponse du SELECT * FROM COLIS

4 réponses


C'est compliqué ta demande, sans que tu ai une autre table pour aider.
J'ai réflèchi à plein de solution, mais à chaque fois ça finissait par être trop compliqué.

Tu as pas une autre table qui peux aider dans le trie ?

Tu group by "numero" sauf que "numero" n'est plus présent dans ta requête finale...

Et il me semble que "as frais" est inutile si tu n'en fais rien ensuite ;-p

Donc, j'imagine que "SELECT * FROM colis WHERE frais in (SELECT MIN(frais), numero FROM colis GROUP BY numero) " fera l'affaire, non?

Le pb c'est qu'avec l'operateur IN la sous-requete ne doit afficher qu'un seul champ
l'autre soucis c'est l'alias 'frais' qui entre en conflit avec le nom de champ 'frais'
une solution consiste à faire une jointure par le numero

SELECT C.*, R1.minfrais FROM colis C LEFT JOIN
              (SELECT MIN(frais) AS minfrais, numero FROM colis GROUP BY numero) R1 ON (C.numero = R1.numero)

Bien joué Huggy ;-) Les jointures conditionnelles... On y pense pas assez!!