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

MySQL Discussion :

Division du résultat de deux requêtes


Sujet :

MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur des travaux des télécommunications
    Inscrit en
    Mai 2015
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur des travaux des télécommunications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2015
    Messages : 41
    Par défaut Division du résultat de deux requêtes
    Bonjour tout le monde,
    je suis entrain de faire certaines requêtes sur une base de données MariaDB qui vont m'aider pour des statistiques.
    j'ai une première requête qui fait la somme d'une colonne que voici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    MariaDB [glpidb]> select sum(takeintoaccount_delay_stat) as "somme" from glpi_tickets
        -> where glpi_tickets.date between '2016-04-04' and '2016-04-10'
        -> ;
    +--------+
    | somme |
    +--------+
    | 312254 |
    +--------+
    et j'ai une deuxième requête qui fait un count que voici

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MariaDB [glpidb]> select count(*) as "FLO" from glpi_tickets where glpi_tickets.is_deleted=0 AND glpi_tickets.takeintoaccount_delay_stat<>0;
    +-----+
    | FLO |
    +-----+
    | 8 |
    +-----+

    je veux diviser "somme" par "flo". j'ai essayer ce code ci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    MariaDB [glpidb]> SELECT "somme"/"flo" AS "temps_moyen"
        -> FROM
        -> (
        -> SELECT SUM(takeintoaccount_delay_stat) AS "somme" FROM glpi_tickets
        -> WHERE glpi_tickets.date between '2016-04-04' AND '2016-04-10'
        -> ),
        -> COUNT(*) AS "flo" FROM glpi_tickets WHERE glpi_tickets.is_deleted=0 and glpi_tickets.takeintoaccount_delay_stat<>0 AND glpi_tickets.date BETWEEN '2016-04-04' and '2016-04-10'
        -> )tmp
        -> ;
    mais çà me génère l'erreur suivante:
    ERROR 1248 (42000): Every derived table must have its own alias
    j'ai fais des recherches mais les solutions que j'ai trouvé ne marchent pas.
    je sais pas si quelqu'un peux avoir une idée sur le sujet où même me proposer une requête un peu plus light parce que je sens que celle ci est un peu lourde.

    Merci d'avance dans l'attente de vos suggestions

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 134
    Par défaut
    Il ne manque pourtant pas grand chose dans ta requête pour qu'elle fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT  "somme"/"flo" AS "temps_moyen"
    FROM    (   SELECT  SUM(takeintoaccount_delay_stat) AS "somme" 
                FROM    glpi_tickets
                WHERE   glpi_tickets.date BETWEEN '2016-04-04' AND '2016-04-10'
            )   tb1
        ,   (   SELECT  COUNT(*) AS "flo" 
                FROM    glpi_tickets 
                WHERE   glpi_tickets.is_deleted = 0
                    AND glpi_tickets.takeintoaccount_delay_stat<>0 
                    AND glpi_tickets.date BETWEEN '2016-04-04' AND '2016-04-10'
            )   tb2
    ;
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur des travaux des télécommunications
    Inscrit en
    Mai 2015
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur des travaux des télécommunications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2015
    Messages : 41
    Par défaut
    Vraiment Merci, çà marche.

  4. #4
    Membre averti
    Homme Profil pro
    Ingénieur des travaux des télécommunications
    Inscrit en
    Mai 2015
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur des travaux des télécommunications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2015
    Messages : 41
    Par défaut Résultat NULL
    Désolé je pense que je suis allé un peu vite en besogne (ceci dû au fait que je débute en SQL)

    en effet la requête me renvoie la valeur "NULL" alors que vu le résultat de chaque requête exécutée indépendamment, la valeur ne devrait pas être nulle. je sais pas si vous avez une idée sur le pourquoi de cela.

    Merci d'avance.

  5. #5
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 134
    Par défaut
    Après relecture, ta requête peut être simplifiée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT  SUM(takeintoaccount_delay_stat)
        /   SUM(CASE WHEN glpi_tickets.is_deleted = 0
                    AND glpi_tickets.takeintoaccount_delay_stat<>0 THEN 1 ELSE 0 END) AS temps_moyen
    FROM    glpi_tickets
    WHERE   glpi_tickets.date BETWEEN '2016-04-04' AND '2016-04-10'
    ;
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  6. #6
    Membre averti
    Homme Profil pro
    Ingénieur des travaux des télécommunications
    Inscrit en
    Mai 2015
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur des travaux des télécommunications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2015
    Messages : 41
    Par défaut
    Merci à vous pour votre aide. çà va me permettre d'avancer dans mon travail.

  7. #7
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 882
    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 882
    Par défaut
    Salut à tous.

    Je pense que l'on peut encore simplifier la requête.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT  avg(takeintoaccount_delay_stat)
    FROM    glpi_tickets
    WHERE   glpi_tickets.date BETWEEN '2016-04-04' AND '2016-04-10'
      AND glpi_tickets.is_deleted = 0
      AND glpi_tickets.takeintoaccount_delay_stat<>0;
    Vous devez le tester et dire si cela convient.

    @+

  8. #8
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 882
    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 882
    Par défaut
    Salut kingflo.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT "somme"/"flo" AS "temps_moyen"
    Ici, tu veux diviser la chaîne de caractères "somme" par une autre chaîne de caractères "flo", et il est normal que tu obtiennes un NULL.
    Il ne faut pas mettre tes noms de colonnes entre guillemet !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT somme/flo AS "temps_moyen"
    @+

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

Discussions similaires

  1. Division du résultat de deux requêtes
    Par Eletor dans le forum Langage SQL
    Réponses: 6
    Dernier message: 03/12/2012, 16h45
  2. Division du résultat de deux requêtes
    Par djerk dans le forum Langage SQL
    Réponses: 4
    Dernier message: 12/10/2012, 13h56
  3. [QR3 D7] Imprimer le résultat de deux requêtes
    Par Moine dans le forum Composants VCL
    Réponses: 2
    Dernier message: 09/05/2008, 16h26
  4. Importer le résultat de deux requête dans un Excel
    Par alexandrebergercyr dans le forum VBA Access
    Réponses: 3
    Dernier message: 08/05/2007, 18h21
  5. Afficher le ratio du résultat de deux requêtes
    Par decour dans le forum Access
    Réponses: 25
    Dernier message: 07/11/2005, 19h54

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