Vous n'êtes pas identifié(e).
Bonjour
je veux obtenir avec la requete ci dessous des stats par mois et par an, et si le mois n'existe pas (pas d'activité) il faut que ça affiche 0 ou null
par exemple je veux
2014 1 25
2014 2 0
2014 3 23
2014 4 65
2014 5 0
etc
or actuellement j'ai ce résultat
2014 1 25
2014 3 23
2014 4 65
j'ai essayé avec une jointure left mais je dois rater qqc !
with a as (
select generate_series(1,12) as mois),
b as (
select
date_part('year', val_date)::integer as annee,
date_part('Month', val_date)::integer as mois,
sum(val_valeur)as moyenne
from (tbl_analyse_ana natural join tbl_stat_sta natural join tbl_valeur_val)
where val_esp=2
and ana_id =4
and sta_id=61
and date_part('year', val_date) between 2014 and 2016
group by date_part('year', val_date) ,date_part('Month', val_date)
order by date_part('year', val_date), date_part('Month', val_date))
select b.annee,a.mois,b.moyenne from a left join b on a.mois=b.mois
order by b.annee, a.mois
Dernière modification par damalaan (09/09/2016 16:32:00)
Hors ligne
De visu, ça a l'air bon. En testant de mon côté, ça fonctionne :
postgres=# with a as (
select generate_series(1,12) as mois),
b as (select i, 10 as j from generate_series(1, 5) i)
select a.mois, coalesce(b.j, 0) from a left join b on a.mois=b.i;
mois | coalesce
------+----------
1 | 10
2 | 10
3 | 10
4 | 10
5 | 10
6 | 0
7 | 0
8 | 0
9 | 0
10 | 0
11 | 0
12 | 0
(12 rows)
Évidemment, ce n'est pas exactement le même schéma. J'ai reconstitué avec ce que j'ai pu.
Guillaume.
Hors ligne
j'ai identifié le problème
j'ai rajouté le coalesce pour forcer les valeurs à 0, mais en fait il me manque les années :
2015;1;72.000
2015;2;73.000
2015;3;39.000
2015;4;5.000
2015;7;1.000
2015;9;4.000
2015;10;16.000
2015;11;17.000
2015;12;37.000
;5;0
;6;0
;8;0
Hors ligne
il vous faut générer l'année et le mois. Par exemple :
WITH a AS (select date_part('year', d) AS annee, date_part('month', d) AS mois from generate_series('2014-01-01'::date, '2016-12-01', '1 month') d)
...
Julien.
https://rjuju.github.io/
Hors ligne
nickel
merci!
Hors ligne