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 :

Double comptage de cellule


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 32
    Points : 12
    Points
    12
    Par défaut Double comptage de cellule
    Bonjour,
    n'étant pas un expert en sql, je suis confronté à un problème.
    Je souhaite récupérer des données d'une base postgresql (c'est une base de taxation), je souhaiterais récupérer dans une même requête le total d'appel entrant et sortant. En faisant deux requêtes distinctes pas de problème. J'ai essayé avec le lien union mais ça ne fonctionne pas. Merci de votre aide.

  2. #2
    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,

    Sans connaitre les tables, impossible de vous aider.

    Mettez aussi les requêtes que vous avez essayées, et indiquez pourquoi elles ne fonctionnent pas comme attendu.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 32
    Points : 12
    Points
    12
    Par défaut
    re bonjour,
    oui excusez-moi.
    Voici la commande que j'ai testé. Le champ es correspond au type d'appel (entrant ou sortant).


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select ticket.pobtenu as Poste, count(*) as entrant from vtp_stats.ticket where date1 between '01/01/2014' and '06/01/2014' 
     and es='1' 
     UNION select ticket.pobtenu as Poste, count(*) as sortant from vtp_stats.ticket where date1 between '01/01/2014' and '06/01/2014' 
     and es='0'

  4. #4
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Ca ne fonctionne pas ne décrit pas votre problème, essayez ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select pobtenu as Poste, 
           sum(case when es='1' then 1 end) as entrant, 
           sum(case when es='0' then 1 end) as sortant
      from vtp_stats.ticket 
     where date1 between '2014-01-01' and '2014-01-06' 
     group by pobtenu

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 32
    Points : 12
    Points
    12
    Par défaut
    Ok super.
    Peux-tu m'expliquer la commande suivante, merci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sum(case when es='1' then 1 end) AS entrant

  6. #6
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    CASE
    Quand es = 1 alors 1 sinon NULL (implicite), vous pouvez préciser ELSE 0 si vous préférez.
    Avec la somme ça fonctionne un peu comme un compteur++ dans une boucle.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 32
    Points : 12
    Points
    12
    Par défaut
    Ok merci.
    Juste une autre petite question en reprenant le code que vous m'avez fourni je voudrais calculer le pourcentage d'appel décroché. Cependant je ne vois pas comment réutilisé la valeur du champ entrant? Voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     SELECT postetic AS Poste, 
           sum(case when es='1' then 1 end) AS entrant,       
           sum(case when es='0' then 1 end) AS sortant,
           sum(case when es='1' and postetic=pobtenu then 1 end) as répondu,
           sum((répondu *100)/entrant) as décroché
      FROM vtp_stats.ticket 
     WHERE date1 BETWEEN '2014-01-01 00:00:00' AND '2014-01-06 23:59:59' and postetic like '333%'
     GROUP BY postetic order by Poste DESC
    J'ai essayé de récupérer en renseignant le nom du champ mais je pensais bien que je ne pourrais en retirer la valeur de celle-ci.

  8. #8
    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,

    en effet, au moment où le contenu du select est évalué, le contenu du select n'existe pas encore !

    Il faut soit :
    1/ reprendre la définition complète pour entrant et sortant (sum(case...
    2/mettre votre requête en sous requête dans une pseudo table, et effectuer votre select dessus

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 32
    Points : 12
    Points
    12
    Par défaut
    ok ça se complique enfin je veux dire que ça commence à faire beaucoup de donnée dans la requête.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     SELECT postetic AS Poste, 
           sum(case when es='1' then 1 end) AS entrant,       
           sum(case when es='0' then 1 end) AS sortant,
           sum(case when es='1' and postetic=pobtenu then 1 end) as répondu,
           sum(((sum(case when es='1' and postetic=pobtenu then 1 end))*100)/(sum(case when es='1'then 1 end))) as pourcentage,
           sum(case when es='1' and sonnerie<'15' then 1 end) as "DECRO < 15",
           sum(case when es='1' and sonnerie>'15' then 1 end) as "DECRO > 15"
      FROM vtp_stats.ticket 
     WHERE date1 BETWEEN '2014-01-01 00:00:00' AND '2014-01-06 23:59:59' and postetic like '333%'
     GROUP BY postetic order by Poste DESC
    J'obtiens un message d'erreur que je ne comprends pas:
    "ERROR: aggregate function calls cannot be nested".

  10. #10
    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
    vous avez un SUM en trop

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
     SELECT postetic AS Poste, 
           sum(case when es='1' then 1 end) AS entrant,       
           sum(case when es='0' then 1 end) AS sortant,
           sum(case when es='1' AND postetic=pobtenu then 1 end) AS répondu,
           ((sum(case when es='1' AND postetic=pobtenu then 1 end))*100)/(sum(case when es='1'then 1 end)) AS pourcentage,
           sum(case when es='1' AND sonnerie<'15' then 1 end) AS "DECRO < 15",
           sum(case when es='1' AND sonnerie>'15' then 1 end) AS "DECRO > 15"
      FROM vtp_stats.ticket 
     WHERE date1 BETWEEN '2014-01-01 00:00:00' AND '2014-01-06 23:59:59' AND postetic LIKE '333%'
     GROUP BY postetic ORDER BY Poste DESC

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 32
    Points : 12
    Points
    12
    Par défaut
    Oui merci.
    Dernier point, j'essaye maintenant d'additionner tous les temps de conversation des appels entrants puis sortant. Là cela implique qu'il faut mettre une condition pour le type d'appel. Car une addition de cellule serait sum(temps) as durée.
    Mais ici cela aurait pour incidence de prendre tous les appels entrants ou sortants. Comment gérer l'addition de ses champs?

  12. #12
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Si j'ai bien compris, il suffit de remplacer 1 par la colonne temps dans la structure CASE, sachant que les fonctions d'aggrégation ignorent les NULLs :
    Variations sur NULL, ou SUM(X+Y) <> SUM(X) + SUM(Y) ?

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 32
    Points : 12
    Points
    12
    Par défaut
    Merci beaucoup success!!

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

Discussions similaires

  1. Comptage de cellule de couleur
    Par JPCOURET dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 14/05/2007, 17h51
  2. [VBA-E] Comptage de cellules contenant des dates
    Par nono le golfeur dans le forum Macros et VBA Excel
    Réponses: 31
    Dernier message: 23/04/2007, 17h47
  3. Double comptage dans une même table
    Par Patoune dans le forum Langage SQL
    Réponses: 5
    Dernier message: 22/03/2007, 17h49
  4. pb date de référence sur double comptage
    Par gg2vig dans le forum Oracle
    Réponses: 9
    Dernier message: 20/03/2007, 14h12
  5. [XSLT]tableau double entrée avec cellule manquante
    Par nferay dans le forum XSL/XSLT/XPATH
    Réponses: 9
    Dernier message: 08/03/2005, 15h07

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