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 :

Requete repartition pourcentage


Sujet :

Requêtes MySQL

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Novembre 2015
    Messages : 3
    Points : 9
    Points
    9
    Par défaut Requete repartition pourcentage
    Bonjour,
    j'espere que que je suis au bon endroit...pour un premier message...
    J'ai fait une requete a partir d'une table 'alldata' et join avec une table 'winddirect' qui me donne des plages en fonction des secteurs de vent ; 'B' direction degre ,dans la colonne 'cpt' on a le nbre de fois dans un intervalle donné le secteur ou le vent a soufflé...
    J'aimerais "tout simplement" avoir la proportion en pourcentage pour chacun des secteurs....,j'ai essayé avec des count, select mais comme je debute je m'emmele un peu les crayons

    La requete

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT datetime,B,label_dir, 
    count(*)as cpt from alldata  
    inner join winddirect 
    on limit_inf<=b and b< limit_sup
    where datetime >= '2015-11-29 04:59:54' and  datetime <= '2015-11-29 06:21:00'  group by label_dir;


    | datetime | B | label_dir | cpt |

    +---------------------+-------+-----------+-----+
    | 2015-11-29 06:16:00 | 82.0 | E | 2 |
    | 2015-11-29 06:10:59 | 68.0 | ENE | 1 |
    | 2015-11-29 06:05:57 | 46.0 | NE | 1 |
    | 2015-11-29 05:16:00 | 15.0 | NNE | 2 |
    | 2015-11-29 05:09:57 | 327.0 | NNO | 3 |
    | 2015-11-29 04:59:54 | 322.0 | NO | 4 |
    | 2015-11-29 05:42:56 | 282.0 | ONO | 3 |
    +---------------------+-------+-----------+-----+
    7 rows in set (0,00 sec)

    Avec tous mes remerciements par avance
    Pascal

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 142
    Points : 38 924
    Points
    38 924
    Billets dans le blog
    9
    Par défaut
    bonjour,
    Je pense que ceci devrait fonctionner, je n'ai pas testé en l'état, il y a peut être des erreurs de syntaxe
    Mais ça fonctionne pour un cas similaire avec mes tables.

    Code : 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
    SELECT t1.DTE
          ,t1.DIR
          ,t1.nbr
          ,t2.tot
          ,100*t1.nbr/t2.nbtot as PCT
    from  (select t1.DTE
                 ,t1.DIR
                 ,t1.nbr
           from (select convert(datetime, char(10)) as DTE
                       ,label_dir                   as DIR
                       ,1                           as NBR
                 from alldata 
                 inner join winddirect 
                    on limit_inf<=b 
                   and b< limit_sup
                 where datetime >= '2015-11-29 04:59:54' 
                   and datetime <= '2015-11-29 06:21:00' 
                ) as S1 
           group by DTE, DIR 
          ) as T1
    inner join
          (select count(*) as TOT
           from alldata 
           inner join winddirect 
              on limit_inf<=b 
             and b< limit_sup
           where datetime >= '2015-11-29 04:59:54' 
             and datetime <= '2015-11-29 06:21:00'    
          ) as T2
       on 1=1
    ;
    L'impossibilité de passer par des CTE avec mysql, rend le code un peu lourd mais bon

  3. #3
    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 384
    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 384
    Points : 19 087
    Points
    19 087
    Par défaut
    Salut à tous.

    Ta requête est bien trop compliquée Escartefigue.
    Admettons que la table soit le résultat obtenue par pascal.21 dans son message.
    Pour calculer le pourcentage, il suffit de faire le calcul entre la valeur de la colonne 'pct' multiplié par 100, et divisé par la somme de la même colonne.
    Un arrondi s'impose, tout comme un correctif du type qui ne sera pas celui attendu. Ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select label_dir
                 cast(round((pct * 100 / (select sum(pct) from ma_table)), 2) as decimal(5,2)) as '%'
    from ma_table
    group by label_dir;
    C'est pas testé mais l'idée est là.

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

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 142
    Points : 38 924
    Points
    38 924
    Billets dans le blog
    9
    Par défaut
    Je me suis embété à compter alors qu'il y a une colonne CPT qui a déjà fait ce travail
    Ma requete prend en compte la possibilité d'avoir plusieurs fois une même direction dans la table, j'ai testé dans cette configuration, si le travail de regroupement est fait en amont, on peut simplifier en effet

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Novembre 2015
    Messages : 3
    Points : 9
    Points
    9
    Par défaut suite
    Tout d'abord un grand merci à tous les 2 pour essayer d'apporter une soluce.....
    je serais bien incapable de faire une requete comme escartefigue, effectivement artemus la solution est ds ce sens , j' ai essayé votre code mais ça coince la colonne cpt est une colonne calculée c'est peut etre la que ça ne vas pas.....? merci en attendant

  6. #6
    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 384
    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 384
    Points : 19 087
    Points
    19 087
    Par défaut
    Salut pascale.

    Mais non, ça ne coince pas !

    Il suffit de créer une table temporaire contenant le résultat de ta requête (celle de ton premier message).
    Ainsi dans cette table temporaire, tu auras le résultat de ton tableau et tu pourras appliquer a requête pour calculer tes pourcentage.
    Elle devra porter les mêmes noms de colonnes que le résultat de ta requête (enfin de ton tableau).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE TEMPORARY TABLE `ma_table` (
      `datetime`     datetime   NOT NULL,
      `b`        char(15)   NOT NULL,
      `label_dir`  char(05) NOT NULL,
      `cpt`  int NOT  NULL
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED;
    Ensuite, il suffit de la remplir en appliquant ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    insert into ma_table
    SELECT datetime,B,label_dir, 
    count(*)as cpt from alldata  
    inner join winddirect 
    on limit_inf<=b and b< limit_sup
    where datetime >= '2015-11-29 04:59:54' and  datetime <= '2015-11-29 06:21:00'  group by label_dir;
    Et enfin, tu peux pratiquer ma requête sur cette table temporaire.

    Ce n'est pas très performant comme façon de faire, mais cela a le mérite de fonctionner.
    Sinon, on peut procéder comme l'a fait Escartefigue, une requête principale avec plusieurs sous-requête imbriquées.

    A toi d'adapter ce résultat à ta convenance.

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

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Novembre 2015
    Messages : 3
    Points : 9
    Points
    9
    Par défaut
    ah merci c'est plus clair Merci encore

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

Discussions similaires

  1. requete calcul pourcentage
    Par frottman1976 dans le forum Requêtes
    Réponses: 1
    Dernier message: 23/09/2009, 17h09
  2. Requete et pourcentage
    Par Hyperactif dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 06/12/2008, 19h30
  3. requete avec pourcentages
    Par stef_445 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 04/03/2008, 19h19
  4. requete champ pourcentage
    Par driver dans le forum Requêtes et SQL.
    Réponses: 0
    Dernier message: 19/11/2007, 14h09
  5. [Access] requete pourcentage
    Par gwendk dans le forum Langage SQL
    Réponses: 7
    Dernier message: 19/05/2006, 10h39

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