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 MySQL Discussion :

Somme sur colonne généré par SQL


Sujet :

Requêtes MySQL

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2014
    Messages : 6
    Points : 7
    Points
    7
    Par défaut Somme sur colonne généré par SQL
    re-bonjour à tous,

    tout d'abord merci pour votre aide.

    J'ai actuellement un erequête qui fonctionne très bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    select s.name,u1.name as user, count(t.id) as nb 
    from `glpi_tickets` t, `glpi_slas` s , `glpi_tickets_users` u , `glpi_users` u1 
    where t.slas_id = s.id 
    and u.tickets_id = t.id 
    and u.type = 2 
    and u.users_id = u1.id 
    and s.id='3' 
    group by s.name , u1.realname 
    order by s.name asc
    Cette requête me permet de lister pour un SLA , les techniciens d'un ticket lié au SLA ainsi que le nombre de ticket pour le technicien.

    SLA 1 Robert 2
    SLA 1 Nico 1
    SLA 1 Pierre 2


    Maintenant je voudrais rajouter une colonne qui fait la somme de la colonne 'nb' généré dans le select.
    Pour avoir le total de ticket lié au SLA (içi 5).

    J'ai tenté de faire un SUM (nb) as total mais sans succés...

    quelqu'un aurait-il une idée ??

    merci à vous

    ++

  2. #2
    Membre émérite Avatar de Drizzt [Drone38]
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2004
    Messages
    1 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 001
    Points : 2 453
    Points
    2 453
    Par défaut
    En MySQL, vu qu'il n'y a pas de fonction de fenêtrage tu va être obligé de faire une sous-requête dédiée.

    Exemple schématique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT champs, compteur_SLA, compteur_global
      FROM (SELECT champs, count(table.id) compteur_SLA FROM table WHERE conditions GROUP BY champs) as t1,
           (SELECT count(table.id) compteur_global FROM table WHERE conditions) as t2
    Je ne réponds pas aux questions techniques par MP, le forum est là pour cela.

    La crypto c'est comme les flambys, une fois que tu as trouvé la languette tu as juste à tirer pour tout faire tomber.

    (\ _ /)
    (='.'=)
    Voici Lapinou. Aidez le à conquérir le monde
    (")-(") en le reproduisant

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2014
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    Merci Drizzt [Drone38]

    J'ai modifié la requête , ce qui me donne :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT s.name , u1.name as user,compteur_SLA , compteur_global 
    FROM 
    (SELECT s.name, u1.name as user, count(t.id) as compteur_SLA FROM `glpi_tickets` t, `glpi_slas` s , `glpi_tickets_users` u , `glpi_users` u1 where t.slas_id = s.id and u.tickets_id = t.id and u.type = 2 and u.users_id = u1.id AND `s`.`id`='8' group by s.name) as t1,
    (SELECT count(t1.id) compteur_global FROM `glpi_tickets` t1, `glpi_slas` s1 where t1.slas_id = s1.id ) as t2 group by s.name , u1.realname order by s.name asc
    Cependant Mysql me retourne une erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #1054 - Unknown column 's.name' in 'field list'
    PROBLEME REGLE AVEC DES ALIAS

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Il serait beaucoup plus simple d'utiliser la clause ROLLUP.

    Si vous ne voulez que la somme par SLA et non la somme totale, vous pouvez inclure votre requete dans une sous requete en table dérivée afin de filtrer sur les calculs qui vous intéressent en vérifiant si les colonnes 'sla' et 'technicien' sont NULL



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    SELECT s.name,u1.name AS user, count(t.id) AS nb 
    FROM `glpi_tickets` t, `glpi_slas` s , `glpi_tickets_users` u , `glpi_users` u1 
    WHERE t.slas_id = s.id 
    AND u.tickets_id = t.id 
    AND u.type = 2 
    AND u.users_id = u1.id 
    AND s.id='3' 
    GROUP BY s.name , u1.realname  WITH ROLLUP
    ORDER BY s.name ASC

  5. #5
    Membre émérite Avatar de Drizzt [Drone38]
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2004
    Messages
    1 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 001
    Points : 2 453
    Points
    2 453
    Par défaut
    Beaucoup plus simple question de point de vue, en fonction de son besoin il aura du post-traitement à effectuer.
    Je ne suis pas très fan des requêtes qui remontent des lignes à traiter de façon particulière.

    Par contre la requête avec ROLLUP sera meilleure niveau perfs.

    @stone-buzz > Si la solution de aieeeuuuuu ne te convient pas, il y a pas mal d'erreurs dans ta requête modifiée. Les alias s et u1 ne sont valables qu'au sein de la première sous-requête. Tu ne peux donc pas les utiliser dans le SELECT principal (ni dans le ORDER). Il faut utiliser t1 qui est l'alias du résultat de la sous-requête.
    Ensuite tu ne dois mettre de second GROUP BY (surtout que la tu groupes sur un champ qui n'existe pas à cet endroit : realname)
    Je ne réponds pas aux questions techniques par MP, le forum est là pour cela.

    La crypto c'est comme les flambys, une fois que tu as trouvé la languette tu as juste à tirer pour tout faire tomber.

    (\ _ /)
    (='.'=)
    Voici Lapinou. Aidez le à conquérir le monde
    (")-(") en le reproduisant

Discussions similaires

  1. [XL-2007] Graphique sur colonnes sélectionnées par combobox
    Par Harry Covair dans le forum Excel
    Réponses: 4
    Dernier message: 24/07/2009, 23h16
  2. Réponses: 2
    Dernier message: 04/07/2008, 10h41
  3. Réponses: 8
    Dernier message: 28/05/2008, 08h46
  4. somme sur colonne visibles
    Par wind_vinch dans le forum Excel
    Réponses: 3
    Dernier message: 20/11/2007, 13h08
  5. Réponses: 9
    Dernier message: 04/01/2007, 11h58

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