Vous n'êtes pas identifié(e).
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
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
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
Ç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
Ç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