banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Mon 21 March 2016 14:46

FloG38
Participant occasionnel
Date d'inscription: 5 Mar 2014
Messages: 15

[PostGreSQL] problème de calcul de part cumulée

Bonjour à tous

Tout d'abord je précise que je travail sur Windows XP avec la version suivante :
"PostgreSQL 8.4.19, compiled by Visual C++ build 1400, 32-bit"

Je souhaite calculer la part cumulée des clients pour une table de ce type :

nom; client
"pierre";50
"paul";10
"jack";15
"jose";20
"marie";40
"josette";20

Je fais donc la requête suivante, qui d'après mes recherches semble correcte:

SELECT  a1.nom, a1.client, SUM (a1.client) as tot_client,SUM(a2.client)::numeric / (SELECT SUM(client)::numeric FROM ex  ) part_cumul
FROM ex a1, ex a2
WHERE a1.client <= a2.client OR (a1.client = a2.client AND a1.nom = a2.nom)
GROUP BY a1.nom, a1.client
ORDER BY a1.client DESC, a1.nom DESC ;

J'ai le résultat suivant :

nom;client;part_cumul
"pierre";50;0.32258064516129032258
"marie";40;0.58064516129032258065
"josette";20;0.83870967741935483871
"jose";20;0.83870967741935483871

"jack";15;0.93548387096774193548
"paul";10;1.00000000000000000000

Il associe systématiquement les lignes de même valeur (en gras). Je ne comprends pas pourquoi et j'aimerais avoir la valeur cumulée intermédiaire.

Est-ce que cela provient de ma version de PostGreSQL  ? qui est assez ancienne il faut le dire.
Y a-t-il un réglage à faire ?
Est-ce que je fais une erreur dans ma requête ?

Je suis dans une impasse et je ne sais plus où chercher pour trouver une solution, c'est pourquoi je sollicite votre aide sur ce coup.
Merci par avance pour vos réactions et n'hésitez pas à me dire si je ne suis pas assez clair.

Hors ligne

 

#2 Mon 21 March 2016 15:39

ChristopheV
Membre
Lieu: Ajaccio
Date d'inscription: 7 Sep 2005
Messages: 3197
Site web

Re: [PostGreSQL] problème de calcul de part cumulée

Bonjour,

WHERE a1.client <= a2.client OR (a1.client = a2.client AND a1.nom = a2.nom)


Normal que les lignes en gras soient associées. La première proposition est vraie a1.client=a2.client


Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close

Hors ligne

 

#3 Mon 21 March 2016 16:28

cbredel
Participant actif
Lieu: Agape Lorraine Nord
Date d'inscription: 20 Feb 2006
Messages: 99
Site web

Re: [PostGreSQL] problème de calcul de part cumulée

Bonjour,

Normalement avec la 8.4 tu peux utiliser des fonctions Window.

du coup, tu pourrais faire quelques choses comme cela


select nom,
client,
sum(client) over (order by client desc) / sum(client) over ()
from a


Je n'ai pas testé mais l'idée et là.

le sum(client) over () : calcul la somme de tout tes clients
le sum(client) over (order by client desc) : te fait la somme cumul dans l'ordre du nombre de client descendant.

Hors ligne

 

#4 Mon 21 March 2016 16:35

ChristopheV
Membre
Lieu: Ajaccio
Date d'inscription: 7 Sep 2005
Messages: 3197
Site web

Re: [PostGreSQL] problème de calcul de part cumulée

Bonjour,

@cbredel, oui bien sûr et avant tout cela l'utilisation d'une close WITH permettrait déjà d’éclaircir la situation.


Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close

Hors ligne

 

#5 Mon 21 March 2016 17:10

cbredel
Participant actif
Lieu: Agape Lorraine Nord
Date d'inscription: 20 Feb 2006
Messages: 99
Site web

Re: [PostGreSQL] problème de calcul de part cumulée

@ChristopheV, tu peux utiliser les fonctions Windows sans CTE ( les requêtes qui débute par with)...

Hors ligne

 

#6 Mon 21 March 2016 17:33

FloG38
Participant occasionnel
Date d'inscription: 5 Mar 2014
Messages: 15

Re: [PostGreSQL] problème de calcul de part cumulée

Merci pour vos réponses.

En effet la requête ne permet pas de différencier ces valeurs. Je vais ainsi chercher à mettre d'autres critères pour les différencier

Hors ligne

 

#7 Mon 21 March 2016 21:11

cbredel
Participant actif
Lieu: Agape Lorraine Nord
Date d'inscription: 20 Feb 2006
Messages: 99
Site web

Re: [PostGreSQL] problème de calcul de part cumulée

Mais si, tu peux le faire...
Ce que je t'ai transmis c'est un exemple... envoyer comme cela...

Effectivement, pour être complètement précis, il faut simplement ordonné sur le nom et le champ client pour différentier les noms dont la valeur de client est identique.
Ce sera donc qq chose du type :

select nom,client,
sum(client) over (order by client desc,nom),
sum(client) over ()
from a
order by client desc

Hors ligne

 

#8 Tue 22 March 2016 11:28

FloG38
Participant occasionnel
Date d'inscription: 5 Mar 2014
Messages: 15

Re: [PostGreSQL] problème de calcul de part cumulée

Oui merci c'est vrai que l'on peut faire comme ça mais du coup je vais utiliser d'autres critères qui m'apporteront plus pour mon analyse.

Hors ligne

 

Pied de page des forums

Powered by FluxBB