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

PostgreSQL Discussion :

Update + group by [8.4]


Sujet :

PostgreSQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 46
    Par défaut Update + group by
    Bonjour,

    Je cherche à faire de l’agrégation en mode mise à jour dans PostgreSQL 8.4.

    Exemple avec une table1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    col1  col2  col3qtt  col4sumqtt
    F1    Y      2.5       
    F1    Y      0.1       
    F2    Y      2.3       5.8       
    F2    N      0.6       5.8
    F2    Y      1.0       5.8
    F2    N      5.2       5.8
    F3    Y      2.9       8.6
    F3    N      8.6       8.6
    En gros c'est un sum de la colonne col3qtt group by col1 quand col2 = N, et j'update chaque ligne de la colonne col4sumqtt avec le résultat.
    Par contre je ne sais pas si c'est possible en language standard SQL de faire ça?
    Merci pour votre aide

  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 997
    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 997
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par davtypo3 Voir le message
    Bonjour,

    Je cherche à faire de l’agrégation en mode mise à jour dans PostgreSQL 8.4.
    ??? ça veut dire quoi ????

    Exemple avec une table1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    col1  col2  col3qtt  col4sumqtt
    F1    Y      2.5       
    F1    Y      0.1       
    F2    Y      2.3       5.8       
    F2    N      0.6       5.8
    F2    Y      1.0       5.8
    F2    N      5.2       5.8
    F3    Y      2.9       8.6
    F3    N      8.6       8.6
    En gros c'est un sum de la colonne col3qtt group by col1 quand col2 = N, et j'update chaque ligne de la colonne col4sumqtt avec le résultat.
    Par contre je ne sais pas si c'est possible en language standard SQL de faire ça?
    Merci pour votre aide
    Ce que vous voulez faire c'est de la redondance de données puisque toutes les données de départ existe et que votre résultat n'est qu'un calcul final... C'est en général une chose à pas faire, ou alors, il faut le faire avec les outils intégrés du SGBDR. Malheureusement, PostGreSQL ne supporte pas les vues matérialisées synchrones (autrement appelées vue indexées).

    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
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Sinon en SQL simple, ce n'est pas trop complexe :
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    create table matable
    ( col1     varchar(10)
    , col2     varchar(10)
    , col3qtt  decimal(5,2)
    );
     
    insert into matable (col1, col2, col3qtt) values
    ('F1', 'Y', 2.5),
    ('F1', 'Y', 0.1),
    ('F2', 'Y', 2.3),
    ('F2', 'N', 0.6),
    ('F2', 'Y', 1.0),
    ('F2', 'N', 5.2),
    ('F3', 'Y', 2.9),
    ('F3', 'N', 8.6);
     
    select col1, col2, col3qtt
         , sum(case col2 when 'N' then col3qtt end) over(partition by col1) as col4sumqtt
      from matable;
     
    COL1 COL2 COL3QTT COL4SUMQTT
    ---- ---- ------- ----------
    F1   Y        2.5           
    F1   Y        0.1           
    F2   Y        2.3        5.8
    F2   N        0.6        5.8
    F2   Y        1          5.8
    F2   N        5.2        5.8
    F3   Y        2.9        8.6
    F3   N        8.6        8.6

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 46
    Par défaut
    Merci pour vos réponses ça fonctionne bien, j'ai deux autres calculs plus difficile:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    *
    col1  col2  col3qttkg  mareeid  *resultat
    F1    Y      2.5          111        
    F1    Y      0.1          112        
    F1    Y      0.1          112        
    F2    Y      2.3          113        
    F2    N      0.6          113        oui (calcul = pour le même F2, pour la même mareeid (113), si somme(col3qttkg) quand col2="N" > 10% de la somme(col3qttkg) quand col2="Y", alors je flag à oui sinon rien )
    F2    Y      1.0          113        
    F2    N      5.2          114        
    F3    Y      2.9          115        
    F3    N      8.6          115        oui
    F3    N      2.5          116
    Je cherche à sortir:

    1) Un indicateur (oui/vide) identifiant si col1 à par mareeid plus de 10% de col2='N' par rapport au total de col2='Y' pour chaque "group by col1 et group by col2", heu c'est pas super clair donc voici le résultat attendu dans la colonne resultat*


    2) La même logique par mareeid par col1 si > 100kg
    Une idée?
    Merci beaucoup,

  5. #5
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Par défaut
    Bonjour,

    C'est bien de demander les réponses toutes faites mais c'est bien aussi de chercher et de montrer ou vous péchez exactement.
    Ce n'est pas comme cela que vous allez apprendre
    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 46
    Par défaut
    J'ai cherché, j'ai trop de volumétrie pour utiliser Excel, obligé d'utiliser SQL, et en agrégation je rame...Pour le moment j'ai pas d'exemple à donner.

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

Discussions similaires

  1. Un Update Groupé sinon Rien
    Par BullSoft dans le forum Requêtes
    Réponses: 2
    Dernier message: 11/01/2008, 17h00
  2. probleme update utilisant une requete group by
    Par pseudobidon57 dans le forum SQL
    Réponses: 11
    Dernier message: 30/05/2007, 15h54
  3. [VB]Pb update entre mon group textbox(i) et ma DataSource
    Par MITCH31 dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 31/01/2006, 09h23
  4. update avec group by
    Par slc dans le forum Requêtes
    Réponses: 4
    Dernier message: 05/10/2004, 13h44
  5. GROUP BY et HAVING dans un UPDATE
    Par MashiMaro dans le forum Langage SQL
    Réponses: 3
    Dernier message: 26/08/2003, 08h03

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