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

Langage SQL Discussion :

Faire la somme en retirant les doublons


Sujet :

Langage SQL

  1. #1
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    1 907
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 907
    Points : 411
    Points
    411
    Par défaut Faire la somme en retirant les doublons
    Bonjour à tous.
    Je tente d'obtenir la volumétrie d'un serveur à une date donnée en additionnant les valeurs d'une colonne mais j'ai des lignes en double.
    J'aimerais extraire ces doublons car ça me fausse le résultat.

    Voici un extrait de mon fichier en pièce jointe

    Ma mauvais requête (qui n'élimine pas les doublons) est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select DSI_FILESYSTEM_SERVEUR, SUM(DSI_FILESYSTEM_VGSIZE) as VOLUMETRIE from TF_DSI_FILESYSTEM  where DSI_FILESYSTEM_DTEXTRACT ='2023-03-29' group by DSI_FILESYSTEM_SERVEUR
    Les doublons que je ne souhaite pas sont dans la colonne DSI_FILESYSTEM_VGNAME

    j'ai tenté la requête suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select SUM(DSI_FILESYSTEM_VGSIZE) as VOLUMETRIE from (select distinct DSI_FILESYSTEM_SERVEUR, DSI_FILESYSTEM_VGSIZE from TF_DSI_FILESYSTEM where DSI_FILESYSTEM_DTEXTRACT ='2023-03-29' group by DSI_FILESYSTEM_SERVEUR ) t
    mais j'ai l'erreur suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Error: ERROR:  Attribute TF_DSI_FILESYSTEM.DSI_FILESYSTEM_VGSIZE must be GROUPed or used in an aggregate function
    merci d'avance pour votre aide
    Images attachées Images attachées  

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 138
    Points : 1 918
    Points
    1 918
    Par défaut
    Bonjour,

    Je ne pense pas que tu puisses faire un distinct sur ces colonnes là car tu pourrais avoir des tailles identiques sur différents volumes.
    Il faut trouver les colonnes discriminantes (on ne les voit pas toutes dans ta capture) et faire le distinct sur ces dernières.

  3. #3
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    1 907
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 907
    Points : 411
    Points
    411
    Par défaut
    Bonjour,
    il ne peut y avoir qu'un seul DSI_FILESYSTEM_VGNAME. Mon but est donc d'obtenir une ligne par DSI_FILESYSTEM_VGNAME et ensuite additionner leur taille.

  4. #4
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 104
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 104
    Points : 8 222
    Points
    8 222
    Billets dans le blog
    17
    Par défaut
    il ne peut y avoir qu'un seul DSI_FILESYSTEM_VGNAME. Mon but est donc d'obtenir une ligne par DSI_FILESYSTEM_VGNAME et ensuite additionner leur taille.
    Il y a tellement de manières d'interpréter cette phrase

    On récupère les couples (DSI_FILESYSTEM_VGNAME, DSI_FILESYSTEM_VGSIZE) uniques
    et on additionne leur taille :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    WITH dataset AS (
        SELECT DISTINCT DSI_FILESYSTEM_VGNAME, DSI_FILESYSTEM_VGSIZE
        FROM TF_DSI_FILESYSTEM 
    )
    SELECT ALL SUM(DSI_FILESYSTEM_VGSIZE)
    FROM dataset;

    Si ce n'est pas bon donne-nous un jeu de données exploitable et le résultat attendu.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  5. #5
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    1 907
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 907
    Points : 411
    Points
    411
    Par défaut
    Bonjour Séb.
    Merci pour ta réponse.
    C'est presque ça.
    Cette requête me donne la somme de tous les serveurs mais moi j'aimerais cela par serveur, du coup avec un ligne par serveur qui est la colonne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DSI_FILESYSTEM_SERVEUR

  6. #6
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 104
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 104
    Points : 8 222
    Points
    8 222
    Billets dans le blog
    17
    Par défaut
    Et bien histoire de ne pas jouer aux devinettes éternellement je réitère :

    Si ce n'est pas bon donne-nous un jeu de données exploitable et le résultat attendu.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  7. #7
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    1 907
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 907
    Points : 411
    Points
    411
    Par défaut
    oups...
    Fichiers attachés Fichiers attachés

  8. #8
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 066
    Points
    19 066
    Par défaut
    Salut à tous.

    Vous n'avez pas précisé le SGBDR ainsi que la version que vous utilisez.
    J'ai récupéré votre fichier Excel, et je l'ai chargé dans une table mysql.
    Code mysql : 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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    --------------
    START TRANSACTION
    --------------
     
    --------------
    DROP DATABASE IF EXISTS `base`
    --------------
     
    --------------
    CREATE DATABASE IF NOT EXISTS `base`
            DEFAULT CHARACTER SET `latin1`
            DEFAULT COLLATE       `latin1_general_ci`
    --------------
     
    --------------
    DROP TABLE IF EXISTS `test`
    --------------
     
    --------------
    CREATE TABLE `test`
    ( `id`          integer unsigned NOT NULL auto_increment primary key,
      `DTEXTRACT`   date             NOT NULL,
      `SERVEUR`     varchar(255)     NOT NULL,
      `TYPEOS`      varchar(255)     NOT NULL,
      `VERSIONOS`   decimal(7,2)     NOT NULL,
      `VGNAME`      varchar(255)     NOT NULL,
      `VGSIZE`      decimal(15,2)    NOT NULL,
      `VGUSED`      decimal(15,2)    NOT NULL
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    LOAD DATA LOCAL INFILE 'FILESYSTEM_5_lignes.csv'
         INTO TABLE `test`
         CHARACTER SET latin1
         FIELDS TERMINATED            BY ';'
                OPTIONALLY ENCLOSED   BY '\"'
                ESCAPED               BY '\\'
         LINES  TERMINATED            BY '\r\n'
         IGNORE 1 LINES
         (@F1,@F2,`TYPEOS`,`VERSIONOS`,`VGNAME`,`VGSIZE`,`VGUSED`,@F3,@F4,@F5,@F6,@F7)
         set `DTEXTRACT` = outils.chgdate(@F1),
             `SERVEUR`   = SUBSTRING_INDEX(@F2,'.',-1)
    --------------
     
    --------------
    select * from `test`
    --------------
     
    +----+------------+----------+--------+-----------+---------+----------+---------+
    | id | DTEXTRACT  | SERVEUR  | TYPEOS | VERSIONOS | VGNAME  | VGSIZE   | VGUSED  |
    +----+------------+----------+--------+-----------+---------+----------+---------+
    |  1 | 2021-02-01 | probtp   | RHEL   |      7.80 | vg_sys  | 15882.24 | 1310.72 |
    |  2 | 2021-02-01 | probtp   | RHEL   |      7.90 | vg_sys  | 15779.84 | 2600.96 |
    |  3 | 2021-02-01 | probtp   | RHEL   |      7.80 | vg_sys  | 15779.84 | 2600.96 |
    |  4 | 2021-02-01 | probtp   | RHEL   |      7.80 | vg_data |  6144.00 | 1020.00 |
    |  5 | 2021-02-01 | probtp   | RHEL   |      6.10 | vg_sys  |  9216.00 | 3471.36 |
    |  6 | 2021-02-01 | clurebr1 | RHEL   |      6.10 | vg_sys  |  8192.00 | 2068.48 |
    +----+------------+----------+--------+-----------+---------+----------+---------+
    --------------
    select `serveur`,
           `vgname`,
           sum(`vgsize`) as volumetrie
     from `test`
    group by `serveur`,`vgname`
    --------------
     
    +----------+---------+------------+
    | serveur  | vgname  | volumetrie |
    +----------+---------+------------+
    | probtp   | vg_sys  |   56657.92 |
    | probtp   | vg_data |    6144.00 |
    | clurebr1 | vg_sys  |    8192.00 |
    +----------+---------+------------+
    --------------
    COMMIT
    --------------
     
    Appuyez sur une touche pour continuer...
    En espérant que cela corresponde à votre demande.

    Cordialement.
    Artemus24.
    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  9. #9
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    1 907
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 907
    Points : 411
    Points
    411
    Par défaut
    Bonjour et merci. Faut que je teste de mon côté mais normalement il ne doit y avoir qu'un même serveur. Lå dans ton résultat je voir la 3ème ligne qui n'est pas le même serveur. Le moteur de base de données c'est Netezza. C'est du Datawarehouse. Je fais mes requêtes sur Squirrel.

  10. #10
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 066
    Points
    19 066
    Par défaut
    Salut Sam01.

    Afin de bien comprendre ce que tu cherches à faire, il nous faut :
    a) le descriptif de tes tables. Je ne désire pas le DDL, mais juste un résumé de la table.
    b) un jeu d'essai complet de problème, pas dix milles lignes.
    c) le résultat attendu.
    d) et la requête que vous avez tentée de faire.

    Nous ne sommes pas devin et nous ne connaissons rien de votre environnement.
    Je connais que trois SGBDR, MySql (et Mariadb), Firebird et Microsoft SQL Server.

    Cordialement.
    Artemus24.
    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

Discussions similaires

  1. [MySQL] Retirer les doublons lors de l'affichage en php
    Par kakashi05 dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 12/08/2011, 17h21
  2. [AC-97] Requête qui retire les doublons en fonctions de 3 clefs primaires.
    Par Jazz_ dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 13/10/2010, 10h26
  3. [XL-2003] faire une somme que sur les colonnes visibles
    Par mimilll dans le forum Excel
    Réponses: 21
    Dernier message: 27/08/2009, 12h10
  4. Retirer les doublons de dates
    Par Mister Nono dans le forum Collection et Stream
    Réponses: 11
    Dernier message: 22/10/2007, 11h26
  5. Retirer les doublons du résultat
    Par Mister Nono dans le forum Requêtes
    Réponses: 1
    Dernier message: 08/10/2006, 12h47

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