Probleme avec DISTINCT / MySQL

Probleme avec DISTINCT / MySQL - SQL/NoSQL - Programmation

Marsh Posté le 31-07-2007 à 00:27:14    

Bonjour,
 
j'ai un petit souci avec une requete SQL, je souhaiterai n'afficher que les valeurs distinctes dans une colonne mais le paramètre DISTINCT semble ignoré par MySQL.
 
Ma table :

Code :
  1. | idc | nom | niv | tps |
  2. |  -  | abc | 001 | 123 |
  3. |  -  | bcd | 001 | 234 |
  4. |  -  | def | 001 | 345 |
  5. |  -  | abc | 002 | 159 |
  6. |  -  | bcd | 002 | 357 |
  7. |  -  | abc | 003 | 654 |
  8. |  -  | bcd | 003 | 578 |


Ma requete :

Code :
  1. SELECT DISTINCT(`nom`), `niv`,`tps`
  2. FROM `classement`
  3. ORDER BY `niv` DESC


Résultat :

Code :
  1. | nom | niv | tps |
  2. | abc | 003 | 654 |
  3. | bcd | 003 | 578 |
  4. | abc | 002 | 159 |
  5. | bcd | 002 | 357 |
  6. | abc | 001 | 123 |
  7. | bcd | 001 | 234 |
  8. | def | 001 | 345 |


Alors que je voudrais :

Code :
  1. | nom | niv | tps |
  2. | abc | 003 | 654 |
  3. | bcd | 003 | 578 |
  4. | def | 001 | 345 |


j'ai essayé :

Code :
  1. SELECT DISTINCT(`nom`), `niv`,`tps`
  2. FROM `classement`
  3. GROUP BY `nom`
  4. ORDER BY `niv`


mais ca renvoie :

Code :
  1. | idc | nom | niv | tps |
  2. |  -  | abc | 001 | 123 |
  3. |  -  | bcd | 001 | 234 |
  4. |  -  | def | 001 | 345 |


 
Je cherche toujours et encore comment faire  :??: Merci


---------------
Amateur de Prise 2 tête
Reply

Marsh Posté le 31-07-2007 à 00:27:14   

Reply

Marsh Posté le 31-07-2007 à 12:15:41    

Effectivement, le mot clé "DISTINCT" porte sur l'ensemble de la ligne, pas sur un champ. Il n'enlèvera donc que les lignes entièrement identiques :)  
 
Pour celà, il faut passer par le GROUP BY. La dernière requête est bonne, où est le problème ?
Il t'a renvoyé un enregistrement parmi ceux possible [:proy]

Reply

Marsh Posté le 31-07-2007 à 14:22:27    

Oui mais la seconde requete ne me permet pas de choisir quelle ligne je veux, ce qu'il faudrait c'est trier, puis dé-doublonner en sélectionnant la première occurrence. Et d'après mes recherches, MySQL ne le fait pas.
 
Peut-être avec une sous-requete ?


---------------
Amateur de Prise 2 tête
Reply

Marsh Posté le 31-07-2007 à 14:36:35    

tu peux le faire avec des sous requets ( requetes imbriqués ) dispos a partir de MySQL 4 ( de mémoire )

Reply

Marsh Posté le 31-07-2007 à 15:44:30    

asseforever a écrit :

Oui mais la seconde requete ne me permet pas de choisir quelle ligne je veux, ce qu'il faudrait c'est trier, puis dé-doublonner en sélectionnant la première occurrence. Et d'après mes recherches, MySQL ne le fait pas.
 
Peut-être avec une sous-requete ?

Après, tu peux, pour chaque colonne, choisir la valeur qui t'intéresse parmi celle qui sont réunies
SELECT nom, MAX(niv) ...
 
Pour choisir une ligne complète en fonction d'un des critères, là, il faut passer par une sous-requête [:proy]  

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed