Skip site navigation (1) Skip section navigation (2)

Peripheral Links

Header And Logo

PostgreSQL
| The world's most advanced open source database.

Site Navigation

Search for
  Advanced Search

Re: Ca lcul de médiane



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 !



Home | Main Index | Thread Index

Privacy Policy | PostgreSQL Archives hosted by Command Prompt, Inc. | Designed by tinysofa
Copyright © 1996 – 2008 PostgreSQL Global Development Group