Bonjour,
J'ai écrit une requête SQL qui me donne par année, mois et élément deux montants.
Le premier est une agrégation par année, mois et élément.
Le second est une agrégation par année et mois.
Voici ma requête :
J'effectue donc une double agrégation de la même table.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 select select ANNEE , MOIS , ELEMENT , MONTANT_ELEMENT , MONTANT_TOTAL from ( -- Montants mensuels par élément select ANNEE , MOIS , ELEMENT , sum( MONTANT ) as MONTANT_ELEMENT from MATABLE group by ANNEE , MOIS , ELEMENT ) TABLE_1 inner join ( -- Montants mensuels pour tous les éléments select ANNEE , MOIS , sum( MONTANT ) as MONTANT_TOTAL from MATABLE group by ANNEE , MOIS ) TABLE_2 on ( TABLE_1.ANNEE = TABLE_2.ANNEE ) and ( TABLE_1.MOIS = TABLE_2.MOIS )
Voici le résultat :
Ca fait le job, mais je n'aime pas du tout la façon dont je l'ai codé à partir de deux sous-requêtes qui balayent donc deux fois la même table.
Je suis persuadé que l'on peut coder cela bien mieux, en ne lisant qu'une seule fois la table MATABLE, mais je ne sais pas comment procéder.
Je pense qu'à partir de fonctions analytiques on doit pouvoir y parvenir mais comment ?
C'est donc pour cela que je fais appel au forum, dans l'espoir que quelqu'un pourra me proposer une solution, SVP.
Peut-être qu'il y a déjà eu ce genre de question sur le forum, mais je ne l'ai pas trouvé.
Ah oui, petite précision, c'est à réaliser sur une base de données POSTGRESQL en version 12.14 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44), 64-bit
D'avance Merci pour votre aide.
Cordialement,
GiDu
Partager