Re: Calcul de médiane

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 !

In response to

Responses

Browse pgsql-fr-generale by date

  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