Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
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 27/07/2005, 16h10   #1
Invité de passage
 
Inscription : février 2005
Messages : 14
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 14
Points : 2
Points : 2
Par défaut SELECT DISTINCT ... ORDER BY

Bonjour,

J'ai une table du style

col1 | col2
-------------
a | 4
a | 5
b | 1
b | 3


J'aimerais faire une requête du style :

SELECT DISTINCT col1 FROM tab ORDER BY col2

mais la clause ORDER BY est difficile a utiliser avec DISTINCT auriez-vous une idée ?

le but étant de ramener

col1
----
b
a
amenis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2005, 17h23   #2
Membre confirmé
 
Inscription : septembre 2003
Messages : 302
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : septembre 2003
Messages : 302
Points : 251
Points : 251
g pas testé mais g trouvé un truc sur le net.
regardes de ce coté : http://archives.postgresql.org/pgsql-novice/2003-11/msg00031.php
papy_tergnier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/07/2005, 07h02   #3
Invité de passage
 
Inscription : février 2005
Messages : 14
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 14
Points : 2
Points : 2
Merci pour le lien, mais j'ai tenté cette solution sans y parvenir.

SELECT DISTINCT ON (col1) col1, col2 FROM tab ORDER BY col1, col2

marche , mais

SELECT DISTINCT ON (col1) col1, col2 FROM tab ORDER BY col2,col1

marche pas.

Le problème vient du fait que col1 est obligé d'être le premier critère de la clause ORDER BY , sinon ca gueule :/
amenis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/07/2005, 11h06   #4
Membre confirmé
 
Inscription : septembre 2003
Messages : 302
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : septembre 2003
Messages : 302
Points : 251
Points : 251
je viens de tester et c vrai que ça merde.
Fais une petite recherche sur google car il y a l'air d'avoir pleins de sujets traités à propos de ton problème. J'ai pas trop le temps de creuser en fait mais tu devrais trouver la réponse et si tu la trouves, postes la car ça peut être intéressant

bon courage
papy_tergnier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/07/2005, 13h22   #5
Invité de passage
 
Inscription : février 2005
Messages : 14
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 14
Points : 2
Points : 2
Merci du conseil, mais en général je post sur les forum qu'en dernier recourt ...

J'avais déja trouvé le lien que tu as donné , mais sans résultat ...
En fait , le gars semble s'en sortir sur la fin , mais j'ai pas compris comment, il faut dire que son exemple n'est pas trivial.

Et mon anglais est peut être un peu limite aussi ...

Vous êtes mon dernier recourt
amenis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/07/2005, 17h46   #6
Nouveau Membre du Club
 
Inscription : juin 2005
Messages : 112
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 112
Points : 28
Points : 28
j'ai presque le même probléme que toi, j'ai pas envi de créer un nouveau post !!

je fais select champ1, champ2 from table1 group by champ1
et ça me dit :

ERROR: column "champ2" must appear in the GROUP BY clause or be used in an aggregate function

et moi j'ai pas envi de grouper suivant "champ2"....

j'ai rien compri, normalement c'est du sql et ça doit passer, ou bien je me trompe ?

merci d'avance.
toome est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/07/2005, 20h00   #7
Invité de passage
 
Inscription : février 2005
Messages : 14
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 14
Points : 2
Points : 2
dans ton cas champ2, doit être une aggregation, c'est à dire un count(*) ou un SUM(champ2) , etc ...

SELECT col1,count(*) FROM tab group by col1

ou SELECT col1,SUM(col2) FROM tab group by col1

Voila, ca devrait régler ton cas , mais pas le mien
amenis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2005, 10h23   #8
Nouveau Membre du Club
 
Inscription : juin 2005
Messages : 112
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 112
Points : 28
Points : 28
Citation:
Envoyé par amenis

SELECT col1,count(*) FROM tab group by col1

ou SELECT col1,SUM(col2) FROM tab group by col1
merci quand même, mai ce que je veux c'est d'avoir en résultat les deux colonnes col1, col2 groupées suivant col1, j'ai bricolé en utilisant "Distinct" mais bon...

ce que j'aurai aimé avoir c'est une requete plus simple :
select * from tab1 group by col1;
cette requete, et s'il n'y aucune ligne répétée dans la base, serait équivalente à :
select distinct * from tab1;

supposant que la seul solution c'est de passer par une agrégation ou faire apparaitre les mêmes colonnes dans la clause 'group by', je trouve que c'est inefficace cette histoire de 'group by', et ce, avec tout mon respect pour les concepteurs sql de postgresql...
toome 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 15h53.


 
 
 
 
Partenaires

Hébergement Web