IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes PostgreSQL Discussion :

Comment réaliser une double agrégation de la même table ?


Sujet :

Requêtes PostgreSQL

  1. #1
    Membre averti
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2015
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2015
    Messages : 57
    Par défaut Comment réaliser une double agrégation de la même table ?
    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 :

    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  )
    J'effectue donc une double agrégation de la même table.

    Voici le résultat :

    Nom : image.jpg
Affichages : 170
Taille : 22,7 Ko

    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

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 986
    Billets dans le blog
    6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT ANNEE , MOIS , ELEMENT , 
           SUM(MONTANT) AS MONTANT_AME, 
           SUM(MONTANT) OVER(PARTITION BY ANNEE , MOIS) AS MONTANT_AM
    FROM   MATABLE
    GROUP  BY ANNEE , MOIS , ELEMENT;
    C'est tout.... Et pour des cours de SQL, mes bouquins comme mon site, notamment :
    https://sqlpro.developpez.com/articl...clause-window/

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre averti
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2015
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2015
    Messages : 57
    Par défaut
    Merci pour votre solution. Effectivement, c'est tout simple.

    GiDu

  4. #4
    Membre averti
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2015
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2015
    Messages : 57
    Par défaut
    J'ai parcouru rapidement le cours, il m'a l'air bien complet. Je vais l'imprimer pour le relire au calme, et surtout l'utiliser pour mes futures développement.

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 986
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par Gidu59 Voir le message
    J'ai parcouru rapidement le cours, il m'a l'air bien complet. Je vais l'imprimer pour le relire au calme, et surtout l'utiliser pour mes futures développement.

    Je suis en train d'en écrire un nouveau car il date !

    Le premier chapitre est déjà en ligne. Le second le sera sous peu.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2003] Comment construire une double requête ?
    Par [ZiP] dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 23/02/2010, 11h42
  2. Comment faire une double INSERTION ?
    Par c-bolo dans le forum Persistance des données
    Réponses: 1
    Dernier message: 04/12/2009, 15h52
  3. Comment créer une double condition
    Par PPLILH2008 dans le forum Excel
    Réponses: 5
    Dernier message: 24/06/2008, 14h07
  4. Réponses: 15
    Dernier message: 01/03/2006, 16h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo