From: | Sébastien Dinot <sebastien(dot)dinot(at)free(dot)fr> |
---|---|
To: | pgsql-fr-generale(at)postgresql(dot)org |
Subject: | Re: Calcul de médiane |
Date: | 2007-02-21 22:46:29 |
Message-ID: | 20070221224629.GA5900@achille.maison |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-fr-generale |
Stephane Bortzmeyer a écrit :
| Avec le schéma de données choisi par l'OP (valeur unique, nombre
| d'occurrences), c'est plus compliqué que ça. Je n'ai pas voulu changer
| son schéma de données, sinon cette solution aurait sans doute marché :
|
| http://book.itzero.com/read/others/0602/OReilly.SQL.Cookbook.Dec.2005_html/0596009763/sqlckbk-CHP-7-SECT-10.html
Finalement, la méthode proposée semble fonctionner mais elle a deux
défauts à mon goût :
- quitte à passer pour le simplet de service, j'avoue que je l'ai
reproduite sans la comprendre ;
- elle est terriblement lente (logique vu l'auto-jointure qui se fait
sans critère dans mon cas et porte donc sur l'intégralité de la
table).
Je m'en suis finalement sorti en écrivant une procédure stockée en
PL/PgSQL qui :
- compte le nombre de valeurs => nbv;
- ouvre un curseur sur la liste triée des valeurs, à partir de la
moitié (offset nbv / 2) et m'extrait 2 valeurs (limit 2) => v1, v2.
- renvoie :
- lorsque nbv % 2 vaut 0 (i.e nombre pair de valeurs) : (v1 + v2) / 2.0
- lorsque nbv % 2 vaut 1 (i.e nombre impair de valeurs) : v1
Je vous remercie pour votre aide.
A++, Sébastien
--
Sébastien Dinot, sebastien(dot)dinot(at)free(dot)fr
http://sebastien.dinot.free.fr/
Ne goûtez pas au logiciel libre, vous ne pourriez plus vous en passer !
From | Date | Subject | |
---|---|---|---|
Next Message | Dimitri Fontaine | 2007-02-21 23:56:54 | Re: Calcul de médiane |
Previous Message | Alain Lucari | 2007-02-21 21:32:22 | Re: Conseil Livre |