PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 Re : Général » Calculer une médiane pondérée » 31/01/2018 11:25:59

Bonjour et un grand merci pour votre aide.
J'ai appliqué l'ensemble de vos solutions à ma base globale. Je connaissais le loyer médian pondéré à trouver et souhaitais pouvoir effectuer d'autres médianes (par exemple selon le type de pièce, l'âge de construction, ...).
J'ai donc appliqué vos requêtes pour calculer la médiane global que je connaissais et je retrouve bien le résultat avec le programme suivant :

WITH runsums AS (
   SELECT  x,             SUM(y) OVER (ORDER BY x ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS runsum,
           SUM(y) OVER (ORDER BY x ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS prevsum,
           SUM(y) OVER ()  AS total
   FROM    Age
)
SELECT x
FROM   runsums
WHERE  total / 2 BETWEEN prevsum AND runsum

J'avoue ne pas savoir pourquoi seul ce programme fonctionne mais c'est bon à savoir smile

Pour information, ma variable pondération étant en double précision, j'ai du modifier la fonction round du programme de damalaan
round(pond / total,2) est devenu round(pond / total)


Encore merci à vous et pour votre collaboration !!!!

#2 Re : Général » Calculer une médiane pondérée » 30/01/2018 09:58:51

Merci beaucoup pour tous ces éléments. Je vais tester tout de suite cette fonction pour voir si cela fonctionne !
Sinon, je passerai sous R qui propose effectivement comme SAS d'indiquer la présence d'une pondération via "weight"

#3 Re : Général » Calculer une médiane pondérée » 29/01/2018 10:47:51

Bonjour,

Merci pour ces premiers éléments. Pour être plus clair dans ma demande, voici un extrait simplifié de ma table brute :
Primary key    loyer_m2    Ponderation
1    10.431    3.564
2    10.938    5.554
3    12.121    5.554
4    10.606    5.554
5    11.045    3.182
6    9.219    11.705
7    11.000    11.705
8    7.789    5.419
9    8.479    12.553
10    8.409    5.419
11    11.443    10.145
12    11.864    8.484
13    11.106    8.484

Comme vous le voyez, j'ai un loyer au m² pour chaque ligne qui correspond à un logement. Ces résultats provenant d'une enquête, des pondérations ont été calculées afin d'être représentatifs.
Je souhaiterais donc à partir de cette table calculer le loyer au m² médian pondéré.
Je comprends que la fonction médian que j'ai utilisé n'est pas à conserver...

Quelle requête écririez-vous pour obtenir ce résultat ?

Merci pour vos éclairages !!!!!

#4 Général » Calculer une médiane pondérée » 24/01/2018 17:39:39

Anne-Lise B
Réponses : 11

Bonjour,

Je souhaite calculer  la médiane d'une variable à partir d'une table de données incluant une pondération.

J'ai effectué le code suivant mais le résultat n'est pas le bon (j'ai calculé la médiane en amont). Quelqu'un saurait-il d'où vient l'erreur ?
Je suppose que je n'incorpore pas ma pondération au bon moment...

with
nom_table1 as (
select (variable*ponderation)/sum(ponderation) as variable_ponderee
from table_source
group by variable, ponderation)
select median (variable_ponderee)
from nom_table1

Merci d'avance pour votre éclairage

Pied de page des forums

Propulsé par FluxBB