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 :

Requête sql à construire


Sujet :

Requêtes MySQL

  1. #1
    Membre du Club
    Femme Profil pro
    Architecte technique
    Inscrit en
    Avril 2015
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Avril 2015
    Messages : 86
    Points : 46
    Points
    46
    Par défaut Requête sql à construire
    hey tout le monde

    J'ai une table "retour_campagne" où j'ai les colonnes suivantes : sexe (qui prend modalité F ou H), Id_mail( qui est le numéro d'identifiant de l'envoi du mail), error(qui prend comme modalités delivered ou undelivered) et les noms des campagnes marketing .
    J'aimerais à travers une requête sql connaitre le taux de mail délivrés pour les hommes et les femmes par campagne.
    Pour cela j'ai besoin de faire un count des id_mail pour les hommes et les femmes par campagne et faire ensuite un count sur les mails délivrés toujours pour les hommes et les femmes par campagns. Et ensuite trouver le taux en divisant mail délivré par mail total multiplié par 100 (par sexe et campagne évidemment je m'appuie sur ce que j'ai trouvé précédemment).

    Une idée?

    Je vous remercie

    Vaness

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    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 080
    Points : 30 801
    Points
    30 801
    Par défaut
    Ce n'est pas très clair...
    Tu as une colonne Campagne et autant de lignes que de campagnes auxquelles a participé la personne
    ou une colonne Campagne avec la liste des campagnes auxquelles a participé la personne
    ou bien encore autant de colonnes que de campagnes auxquelles aurait pu participer la personne ?
    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 du Club
    Femme Profil pro
    Architecte technique
    Inscrit en
    Avril 2015
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Avril 2015
    Messages : 86
    Points : 46
    Points
    46
    Par défaut
    re,
    J'ai une colonne Campagne et autant de lignes que de campagnes auxquelles a participé la personne
    Cdt,

    Vaness

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    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 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Quelque chose comme ça, à tester :

    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
    SELECT T1.CDC
         , T1.CDS
         , CAST(ROUND(100*T1.NBR/T2.TOT+0,5) AS DECIMAL (5,2)) AS PCT
    FROM                                                             
         (SELECT S1.cdc       AS CDC                                  
               , S1.cds       AS CDS
               , SUM(S1.NBR)  AS NBR                                  
          FROM  (SELECT cd_camp AS CDC                                
                      , sexe    AS CDS 
                      , case when cd_error = 'delivered' then 1 else 0 end   AS NBR                                
                 FROM ma_table) AS S1                                    
          GROUP BY CDC, CDS                                               
         ) AS T1                                                     
    INNER JOIN                                                       
         (SELECT COUNT(*) AS TOT FROM ma_table) AS T2                    
    ON 1=1

  5. #5
    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 381
    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 381
    Points : 19 065
    Points
    19 065
    Par défaut
    Salut à tous.

    Citation Envoyé par vanessa75
    J'aimerais à travers une requête sql connaitre le taux de mail délivrés pour les hommes et les femmes par campagne.
    Les explications sont pourtant simples à comprendre !

    La solution est la fonction "avg()" qui calcul la moyenne.
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    --------------
    SET AUTOCOMMIT = 0
    --------------
     
    --------------
    START TRANSACTION
    --------------
     
    --------------
    DROP DATABASE IF EXISTS `base`
    --------------
     
    --------------
    CREATE DATABASE `base`
        DEFAULT CHARACTER SET `latin1`
        DEFAULT COLLATE       `latin1_general_ci`
    --------------
     
    --------------
    DROP TABLE IF EXISTS `retour_campagne`
    --------------
     
    --------------
    CREATE TABLE `retour_campagne`
    ( `id`        integer  unsigned not null auto_increment primary key,
      `sexe`         char(01)       not null,
      `erreur`       char(11)       not null,
      `campagne`  varchar(255)      not null
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    insert into `retour_campagne` (`sexe`,`erreur`,`campagne`) values
      ('H', 'undelivered', 'marketing 01'),  ('F', 'undelivered', 'marketing 02'),
      ('H',   'delivered', 'marketing 03'),  ('H',   'delivered', 'marketing 04'),
      ('H',   'delivered', 'marketing 01'),  ('F',   'delivered', 'marketing 02'),
      ('H', 'undelivered', 'marketing 03'),  ('F', 'undelivered', 'marketing 04'),
      ('H',   'delivered', 'marketing 01'),  ('H', 'undelivered', 'marketing 02'),
      ('H',   'delivered', 'marketing 03'),  ('H',   'delivered', 'marketing 04'),
      ('H', 'undelivered', 'marketing 01'),  ('F', 'undelivered', 'marketing 02'),
      ('H',   'delivered', 'marketing 03'),  ('F', 'undelivered', 'marketing 04'),
      ('F',   'delivered', 'marketing 01'),  ('H',   'delivered', 'marketing 02'),
      ('F', 'undelivered', 'marketing 03'),  ('F', 'undelivered', 'marketing 04'),
      ('F',   'delivered', 'marketing 01'),  ('F', 'undelivered', 'marketing 02'),
      ('F',   'delivered', 'marketing 03'),  ('H',   'delivered', 'marketing 04'),
      ('F', 'undelivered', 'marketing 01'),  ('F', 'undelivered', 'marketing 02'),
      ('H',   'delivered', 'marketing 03'),  ('F',   'delivered', 'marketing 04'),
      ('H',   'delivered', 'marketing 01'),  ('H', 'undelivered', 'marketing 02'),
      ('F', 'undelivered', 'marketing 03'),  ('H', 'undelivered', 'marketing 04'),
      ('H',   'delivered', 'marketing 01'),  ('H', 'undelivered', 'marketing 02'),
      ('F',   'delivered', 'marketing 03'),  ('H',   'delivered', 'marketing 04'),
      ('H', 'undelivered', 'marketing 01'),  ('F', 'undelivered', 'marketing 02'),
      ('H',   'delivered', 'marketing 03'),  ('F', 'undelivered', 'marketing 04')
    --------------
     
    --------------
    select * from `retour_campagne`
    --------------
     
    +----+------+-------------+--------------+
    | id | sexe | erreur      | campagne     |
    +----+------+-------------+--------------+
    |  1 | H    | undelivered | marketing 01 |
    |  2 | F    | undelivered | marketing 02 |
    |  3 | H    | delivered   | marketing 03 |
    |  4 | H    | delivered   | marketing 04 |
    |  5 | H    | delivered   | marketing 01 |
    |  6 | F    | delivered   | marketing 02 |
    |  7 | H    | undelivered | marketing 03 |
    |  8 | F    | undelivered | marketing 04 |
    |  9 | H    | delivered   | marketing 01 |
    | 10 | H    | undelivered | marketing 02 |
    | 11 | H    | delivered   | marketing 03 |
    | 12 | H    | delivered   | marketing 04 |
    | 13 | H    | undelivered | marketing 01 |
    | 14 | F    | undelivered | marketing 02 |
    | 15 | H    | delivered   | marketing 03 |
    | 16 | F    | undelivered | marketing 04 |
    | 17 | F    | delivered   | marketing 01 |
    | 18 | H    | delivered   | marketing 02 |
    | 19 | F    | undelivered | marketing 03 |
    | 20 | F    | undelivered | marketing 04 |
    | 21 | F    | delivered   | marketing 01 |
    | 22 | F    | undelivered | marketing 02 |
    | 23 | F    | delivered   | marketing 03 |
    | 24 | H    | delivered   | marketing 04 |
    | 25 | F    | undelivered | marketing 01 |
    | 26 | F    | undelivered | marketing 02 |
    | 27 | H    | delivered   | marketing 03 |
    | 28 | F    | delivered   | marketing 04 |
    | 29 | H    | delivered   | marketing 01 |
    | 30 | H    | undelivered | marketing 02 |
    | 31 | F    | undelivered | marketing 03 |
    | 32 | H    | undelivered | marketing 04 |
    | 33 | H    | delivered   | marketing 01 |
    | 34 | H    | undelivered | marketing 02 |
    | 35 | F    | delivered   | marketing 03 |
    | 36 | H    | delivered   | marketing 04 |
    | 37 | H    | undelivered | marketing 01 |
    | 38 | F    | undelivered | marketing 02 |
    | 39 | H    | delivered   | marketing 03 |
    | 40 | F    | undelivered | marketing 04 |
    +----+------+-------------+--------------+
    --------------
    select    campagne,
              sexe,
              sum(case erreur when 'undelivered' then 1 else 0 end) as 'undelivered',
              sum(case erreur when   'delivered' then 1 else 0 end) as  'delivered'
        from  retour_campagne
    group by  campagne, sexe
    order by  campagne, sexe
    --------------
     
    +--------------+------+-------------+-----------+
    | campagne     | sexe | undelivered | delivered |
    +--------------+------+-------------+-----------+
    | marketing 01 | F    |           1 |         2 |
    | marketing 01 | H    |           3 |         4 |
    | marketing 02 | F    |           5 |         1 |
    | marketing 02 | H    |           3 |         1 |
    | marketing 03 | F    |           2 |         2 |
    | marketing 03 | H    |           1 |         5 |
    | marketing 04 | F    |           4 |         1 |
    | marketing 04 | H    |           1 |         4 |
    +--------------+------+-------------+-----------+
    --------------
    select    campagne,
              sexe,
              cast(avg(case erreur when 'undelivered' then 1 else 0 end) * 100 as decimal (6,3)) as 'undelivered',
              cast(avg(case erreur when   'delivered' then 1 else 0 end) * 100 as decimal (6,3)) as 'delivered'
        from  retour_campagne
    group by  campagne, sexe
    order by  campagne, sexe
    --------------
     
    +--------------+------+-------------+-----------+
    | campagne     | sexe | undelivered | delivered |
    +--------------+------+-------------+-----------+
    | marketing 01 | F    |      33.333 |    66.667 |
    | marketing 01 | H    |      42.857 |    57.143 |
    | marketing 02 | F    |      83.333 |    16.667 |
    | marketing 02 | H    |      75.000 |    25.000 |
    | marketing 03 | F    |      50.000 |    50.000 |
    | marketing 03 | H    |      16.667 |    83.333 |
    | marketing 04 | F    |      80.000 |    20.000 |
    | marketing 04 | H    |      20.000 |    80.000 |
    +--------------+------+-------------+-----------+
    --------------
    select    campagne,
              cast(avg(case when sexe = 'H' and erreur = 'undelivered' then 1 else 0 end) * 100 as decimal (6,3)) as 'undelivered Homme',
              cast(avg(case when sexe = 'F' and erreur = 'undelivered' then 1 else 0 end) * 100 as decimal (6,3)) as 'undelivered Femme',
              cast(avg(case when sexe = 'H' and erreur =   'delivered' then 1 else 0 end) * 100 as decimal (6,3)) as   'delivered Homme',
              cast(avg(case when sexe = 'F' and erreur =   'delivered' then 1 else 0 end) * 100 as decimal (6,3)) as   'delivered Femme'
        from  retour_campagne
    group by  campagne
    order by  campagne
    --------------
     
    +--------------+-------------------+-------------------+-----------------+-----------------+
    | campagne     | undelivered Homme | undelivered Femme | delivered Homme | delivered Femme |
    +--------------+-------------------+-------------------+-----------------+-----------------+
    | marketing 01 |            30.000 |            10.000 |          40.000 |          20.000 |
    | marketing 02 |            30.000 |            50.000 |          10.000 |          10.000 |
    | marketing 03 |            10.000 |            20.000 |          50.000 |          20.000 |
    | marketing 04 |            10.000 |            40.000 |          40.000 |          10.000 |
    +--------------+-------------------+-------------------+-----------------+-----------------+
    --------------
    COMMIT
    --------------
     
    --------------
    SET AUTOCOMMIT = 1
    --------------
     
    Appuyez sur une touche pour continuer...
    @ Escartefigue : pourquoi réinventer ce qui existe déjà ?

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

Discussions similaires

  1. construire un graphe à partir d'une requête Sql
    Par mehdiyou dans le forum VB.NET
    Réponses: 5
    Dernier message: 20/04/2008, 17h27
  2. Aide pour construire une requête SQL
    Par squalito dans le forum Oracle
    Réponses: 1
    Dernier message: 09/03/2007, 15h04
  3. Aide pour construire une requête SQL
    Par squalito dans le forum Langage SQL
    Réponses: 3
    Dernier message: 09/03/2007, 14h08
  4. Réponses: 4
    Dernier message: 17/02/2007, 15h11

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