From: | Denis Bitouzé <dbitouze(at)wanadoo(dot)fr> |
---|---|
To: | Guillaume Lelarge <guillaume(at)lelarge(dot)info> |
Cc: | pgsql-fr-generale(at)postgresql(dot)org |
Subject: | Re: Spécifier un premier élément dans une clause select... order by |
Date: | 2009-12-15 16:09:53 |
Message-ID: | 20091215170953.119fd9de@drums |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-fr-generale |
Le mardi 15/12/09 à 16h41,
Guillaume Lelarge <guillaume(at)lelarge(dot)info> a écrit
>
> Le mardi 15 décembre 2009 à 16:31:47, Denis Bitouzé a écrit :
> > Le mardi 15/12/09 à 16h23,
> >
> > Guillaume Lelarge <guillaume(at)lelarge(dot)info> a écrit :
> > > Ceci devrait le faire :
> > >
> > > SELECT * from etu order by id_etu >= 300, id_etu;
> >
> > Ne serait-ce pas plutôt :
> >
> > SELECT * from etu order by nom_etu,id_etu >= 300;
> >
>
> Si tu fais ça, tu auras un tri par les noms en premier.
Euh... Avec :
SELECT * from etu order by id_etu >= 300, id_etu;
j'ai tous les enregistrements, y compris d'id_etu < 300 et classés par
ordre sur les id_etu.
> > que tu voulais dire ? Mais ça ne fonctionne dans aucun des cas : les
> > id_etu < 300 ne sont pas omis.
> >
>
> Ton histoire n'est pas claire.
J'en ai conscience :)
> Tu veux trier par la colonne id_etu ou filtrer ?
Comme précisé à Jean-Christophe, je souhaite :
1. d'abord effectuer le tri sur les noms et prénoms
2. ensuite tronquer le résultat en n'y faisant pas figurer ceux dont
l'id_etu est < 300.
> Si tu veux omettre les id_etu < 300, faut le mettre dans la clause
> WHERE :
>
> SELECT * from etu where id_etu >= 300 order by nom_etu;
Oui, mais ça, ça effectue les opérations dans l'ordre inverse :
1. d'abord ça élimine les id_etu < 300 ;
2. ensuite ça trie.
Et j'ai besoin de l'inverse.
Pour être plus clair, voici un exemple :
CREATE TABLE test (
id_etu integer NOT NULL,
nom_etu text NOT NULL,
prenom_etu text NOT NULL
);
COPY test (id_etu, nom_etu, prenom_etu) FROM stdin;
1 Newton Isaac
2 Einstein Albert
3 Descartes René
4 Galois Évariste
\.
Je souhaite trier par ordre alphabétique :
SELECT * from test order by nom_etu ,prenom_etu;
id_etu | nom_etu | prenom_etu
--------+-----------+------------
3 | Descartes | René
2 | Einstein | Albert
4 | Galois | Évariste
1 | Newton | Isaac
(4 lignes)
mais en ne faisant commencer cette liste qu'à Einstein (id_etu >=2), de
façon à obtenir :
id_etu | nom_etu | prenom_etu
--------+-----------+------------
2 | Einstein | Albert
4 | Galois | Évariste
1 | Newton | Isaac
Les solutions qui m'ont été proposées ne fonctionnent pas :
select * from test where id_etu >= 2 order by nom_etu,prenom_etu;
id_etu | nom_etu | prenom_etu
--------+-----------+------------
3 | Descartes | René
2 | Einstein | Albert
4 | Galois | Évariste
J'ai (3 | Descartes | René) non souhaité et pas (1 | Newton | Isaac)
qui est souhaité. Il en est de même de :
SELECT *
FROM
(SELECT * FROM test ORDER BY nom_etu, prenom_etu) AS tmp
WHERE id_etu >= 2
Merci !
--
Denis
From | Date | Subject | |
---|---|---|---|
Next Message | Guillaume Lelarge | 2009-12-15 17:06:19 | Re: Spécifier un premier élément dans une clause select... order by |
Previous Message | Guillaume Lelarge | 2009-12-15 15:50:57 | Re: Spécifier un premier élément dans une clause select... order by |