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 02/01/2014 11:36:55

CHR
Membre

[RESOLU] - SELECT avec un total général, par staff_id et par mois

Bonjour fully newbie dans le monde de Postgresql j'essaie d'obtenir le résultat suivant:

Staff_ID     Mois    TotMois     Total       TotGeneral
1                Jan         3            10              41
2                Jan         4            10              41
3                Jan         3            10              41
1                Fev         9            19              41
2                Fev         9            19              41
3                Fev         1            19              41
1                Mar         6            12              41
2                Mar         5            12              41
3                Mar         1            12              41

J'ai utilisé la BD d'exemple pagila (tutosql), la table ici comporterait 41 lignes, le but étant d'obtenir des sous-totaux (ici un count) dissociés en fonction de groupements ou de criètres à choix, ici Staff ID et Mois.

J'ai essayé les subquery (select dans un select) mais le hic est que la colonne Total renvoie toujours plusieurs lignes (évidement une par mois) et que donc la sous-requête me ramène une erreur...
Merci d'avance pour votre aide et bonne année !
chr

Dernière modification par CHR (02/01/2014 12:17:06)

Hors ligne

#2 02/01/2014 11:42:17

gleu
Administrateur

Re : [RESOLU] - SELECT avec un total général, par staff_id et par mois

Sans avoir les données en entrée, je ne vois pas comment on va pouvoir vous aider. La base d'exemple dont vous parlez (pagila) ne contient que les staff_id 1 et 2, du coup votre exemple est étonnant avec un stff_id à 3. Bref, détaillez si vous voulez qu'on puisse vous aider.

La seule chose que je peux dire actuellement, c'est qu'il faut certainement utiliser les requêtes de fenêtrage.


Guillaume.

Hors ligne

#3 02/01/2014 11:46:46

CHR
Membre

Re : [RESOLU] - SELECT avec un total général, par staff_id et par mois

Merci !
J'ai utilisé la BD pagila et la table payment, seule différence c'est que j'ai utilisé EXTRACT(month from payment_date) pour obtenir le mois et que j'ai le chiffre et non l'abréviation du mois. Mais je prépare une table pour le post.

Hors ligne

#4 02/01/2014 12:06:35

gleu
Administrateur

Re : [RESOLU] - SELECT avec un total général, par staff_id et par mois

Ça devrait ressembler à ceci :

SELECT DISTINCT ON (staff_id, extract(month FROM payment_date))
  staff_id, extract(month FROM payment_date),
  count(*) over (PARTITION BY staff_id, extract(month FROM payment_date)) AS TotMois,
  count(*) over (PARTITION BY staff_id) AS Total,
  count(*) over () AS TotGeneral
FROM payment;

Guillaume.

Hors ligne

#5 02/01/2014 12:15:47

CHR
Membre

Re : [RESOLU] - SELECT avec un total général, par staff_id et par mois

gleu a écrit :

Ça devrait ressembler à ceci :

SELECT DISTINCT ON (staff_id, extract(month FROM payment_date))
  staff_id, extract(month FROM payment_date),
  count(*) over (PARTITION BY staff_id, extract(month FROM payment_date)) AS TotMois,
  count(*) over (PARTITION BY staff_id) AS Total,
  count(*) over () AS TotGeneral
FROM payment;

Génial !!! Plus que ressembler, c'est EXACTEMENT ça... et dire que j'ai cherché pendant des heures, merci !!!!

Hors ligne

Pied de page des forums