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 :

[MySQL] Requête avec aggrégation


Sujet :

Requêtes MySQL

  1. #1
    Nouveau membre du Club
    Inscrit en
    Septembre 2008
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 49
    Points : 37
    Points
    37
    Par défaut [MySQL] Requête avec aggrégation
    Bonjour. J'ai un petit soucis avec une requête... la voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select count(table1.ID_ticket) / count(table2.ID_ticket)
    from test as table1, test as table2
    where table1.Annule = 1
    Ici ID_ticket est une clef primaire défini comme un entier. Le résultat de ma division doit être un réel, mais il m'affiche 1 (ce qui est logique si il fait une division entre deux champs définis comme des entiers).

    Comment puis-je avoir le résultat en réel ?

    Merci d'avance.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Salut,

    Tu n'as pas précisé ton sgbd, je n'ai pas ce probleme sous oracle.
    Es tu sur que les deux count ne sont pas égaux?

  3. #3
    Nouveau membre du Club
    Inscrit en
    Septembre 2008
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 49
    Points : 37
    Points
    37
    Par défaut
    Je suis sur MySQL... Mais effectivement les deux count sont égaux... j'étais tellement sur le problème de type que je n'ai pas vérifié cela...

    Mais du coup ça me ramène à un autre problème car le nombre de ID_ticket sur la table1 devrait être réduit considérablement à cause de la condition...

  4. #4
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 641
    Points
    4 641
    Par défaut
    salut,

    c'est normal que tu aies1 puisque tu fais une jointure entre tes 2 tables, donc tu as forcément le même nombre de lignes

    essaie comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT count(table1.ID_ticket) / (select count(table2.ID_ticket) from test as table2)
    FROM test AS table1
    WHERE table1.Annule = 1

  5. #5
    Nouveau membre du Club
    Inscrit en
    Septembre 2008
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 49
    Points : 37
    Points
    37
    Par défaut
    J'ai le résultat que j'attendais ! Merci beaucoup !

  6. #6
    Nouveau membre du Club
    Inscrit en
    Septembre 2008
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 49
    Points : 37
    Points
    37
    Par défaut
    Re-Bonjour !
    J'ai mon problème qui a évolué... Sur cette requête je souhaite ajouter d'autres informations selon l'affichage suivant :

    Nom du Magasin | Nombre de ticket supprimé | Nombre de Ticket | % de ticket supprimé.

    Actuellement j'arrive très bien à avoir chaque résultat de façon séparé, mais dès que j'essaye d'avoir tout ça en une seule requête c'est la catastrophe. Voici chaque requête de façon séparée :

    Nom du Magasin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT distinct magasin.nom_magasin
    FROM magasin, ticket
    WHERE magasin.id_magasin = ticket.id_magasin
    Nombre de ticket supprimé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT COUNT(ID_ticket)
    FROM ticket
    WHERE ticket.Annule = 1
    Nombre de Ticket
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT COUNT(ID_ticket)
    FROM ticket
    % de ticket supprimé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT count(table1.ID_ticket) / (SELECT count(table2.ID_ticket) FROM ticket AS table2)
    FROM ticket AS table1
    WHERE table1.Annule = 1
    Voilà et je ne sais pas du tout comment faire une belle requête sans que tout le monde ne soit pas content à cause des alias que je ne maîtrise pas du tout...

    Je serai donc heureux si on pouvait me communiquer un cours sur les Alias en SQL sachant que cette requête va encore se complexifier et aller chercher des informations dans d'autres tables, mais si vous avez la solution pour cela je suis aussi preneur.

    Merci d'avance.

  7. #7
    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
    Salut,
    Je ne sais pas si cette requète répondra a ton besoin, j'ai pas très bien compris ce que tu voulais faire.
    Mais en supposant que tu veux le nombre de tickets annulés, le nombre total et le pourcentage par magasin, et que nom_magasin est unique dans ta table magasin, ça devrait te mettre sur la voie.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT m.nom_magasin,annul.nb_annul,tot_t.nb_ticket,annul.nb_annul/tot_t.nb_ticket as pourcentage
    FROM magasin m
    JOIN (SELECT id_magasin,COUNT(ID_ticket) as nb_annul
          FROM ticket
          WHERE ticket.Annule = 1
          group by id_magasin) as annul
               on (m.id_magasin = annul.id_magasin)
    JOIN (SELECT id_magasin,COUNT(ID_ticket) as nb_ticket
          FROM ticket
          group by id_magasin) as tot_t
               on (m.id_magasin = tot_t.id_magasin)
    [EDIT] ou alors comme çà pour éviter une jointure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT m.nom_magasin,t.nb_annul,t.nb_ticket,t.nb_annul/t.nb_ticket as pourcentage
    FROM magasin m
    JOIN (SELECT id_magasin,
                 sum(case when annule=1 then 1 else 0 end) as nb_annul,
                 COUNT(ID_ticket) as nb_ticket
          FROM ticket
          group by id_magasin) as t
               on (m.id_magasin = t.id_magasin)
    Sinon, si tu veux pour chaque nom_magasin les décomptes totaux et donc toujours les mêmes données par ligne (ce qui semble être le cas vu tes requètes), tu peux faire un truc horrible à base de select dans le select impliquant une réévaluation des count pour chaque ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT nom_magasin,
           (SELECT COUNT(ID_ticket)
            FROM ticket
            WHERE ticket.Annule = 1) as nb_annul,
            (SELECT COUNT(ID_ticket) FROM ticket) as nb_tot
            (SELECT count(table1.ID_ticket) / (SELECT count(table2.ID_ticket) FROM ticket AS table2)
             FROM ticket AS table1
             WHERE table1.Annule = 1) as pourcentage
    from magasin
    where id_magasin in (select id_magasin from ticket)
    ou générer l'affichage côté appli ce qui me semble préférable même si je ne vois pas trop l'intérêt du résultat.

  8. #8
    Nouveau membre du Club
    Inscrit en
    Septembre 2008
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 49
    Points : 37
    Points
    37
    Par défaut
    Oh le résultat a un intérêt ! Il n'y a pas de soucis à se faire de côté là. En tout cas je te remercie pour tout ça, je vais jeter un coup d'œil de prêt pour comprendre ton code !

    Encore merci.

Discussions similaires

  1. [MySQL] PHP-MYSQL: Requête avec jointures
    Par idamarco dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 05/03/2009, 07h15
  2. [MySQL] requête avec WHERE sur primary key
    Par newbiemac dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 04/09/2007, 09h41
  3. [MySQL] Requête avec condition sur un champ
    Par nonhosonno dans le forum Langage SQL
    Réponses: 2
    Dernier message: 26/02/2007, 14h00
  4. [MySQL] Requête avec les dates
    Par lusitano11 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 17/01/2007, 09h50
  5. [MySQL] erreur avec sous-requête
    Par Piou2fois dans le forum Langage SQL
    Réponses: 4
    Dernier message: 04/02/2006, 13h44

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