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 :

résultat de plusieurs requêtes (count) sur la même colonne


Sujet :

MySQL

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Décembre 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur de déploiement réseaux

    Informations forums :
    Inscription : Décembre 2015
    Messages : 10
    Points : 30
    Points
    30
    Par défaut résultat de plusieurs requêtes (count) sur la même colonne
    Bonjour,

    J'aimerai avoir dans un seul affichage le résultat de plusieurs requêtes sur la même colonne et affiche les résultats en excel si possible.

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select count(*) from table1 where job='A'
    select count(*) from table1 where job='B'
    select count(*) from table1 where job='C'
    .
    .
    .
    select count(*) from table1 where job='k'
    select count(*) from table1 where job='L'

    Si quelqu'un connait la syntaxe pour arriver à ce résultat je suis preneur.
    Par avance merci.

  2. #2
    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 644
    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 644
    Points : 19 907
    Points
    19 907
    Par défaut
    Salut winforce.

    Le group by !

    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
    --------------
    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 `test`
    --------------
     
    --------------
    create table `test` (
      `id`   int unsigned  NOT NULL AUTO_INCREMENT PRIMARY KEY,
      `job`  smallint      NOT NULL,
      `lib`  char(10)      NOT NULL
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    insert into `test` (`job`,`lib`) values
      (1, 'rouge'),(1, 'vert'),(1, 'rouge'),(1, 'vert'),
      (2, 'bleu'),(2, 'noir'),(2, 'rose'),
      (3, 'violet'),(3, 'marron')
    --------------
     
    --------------
    select * from test
    --------------
     
    +----+-----+--------+
    | id | job | lib    |
    +----+-----+--------+
    |  1 |   1 | rouge  |
    |  2 |   1 | vert   |
    |  3 |   1 | rouge  |
    |  4 |   1 | vert   |
    |  5 |   2 | bleu   |
    |  6 |   2 | noir   |
    |  7 |   2 | rose   |
    |  8 |   3 | violet |
    |  9 |   3 | marron |
    +----+-----+--------+
    --------------
    select job, count(*)
    from test
    group by job
    order by job
    --------------
     
    +-----+----------+
    | job | count(*) |
    +-----+----------+
    |   1 |        4 |
    |   2 |        3 |
    |   3 |        2 |
    +-----+----------+
    --------------
    COMMIT
    --------------
     
    --------------
    SET AUTOCOMMIT = 1
    --------------
     
     
    Appuyez sur une touche pour continuer...
    @+

  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 644
    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 644
    Points : 19 907
    Points
    19 907
    Par défaut
    Re salut Winforce.

    Voici un petit exemple pour introduire un résultat dans une cellule d'une feuille de excel.

    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
    <!doctype html>
    <html>
    <header>
    <meta charset="ISO-8859-1" />
    <title>Test Excel !</title>
     
    <link rel="stylesheet" type="text/css" href="Styles.css" />
    </header>
    <body>
    <h1>Test Application Excel</h1>
     
    <?php
    /*-----------------------*/
    /* Fichier de Sauvegarde */
    /*-----------------------*/
     
    $Save='F:\\Site-01\\Ex_11\\Classeurs\\save.xlsx';
     
    if (file_exists($Save))
    {
    	unlink($Save);
    }
     
    /*-----------------*/
    /* Classeurs Excel */
    /*-----------------*/
     
    $File='F:\\Site-01\\Ex_11\\Classeurs\\test.xlsx';
     
    if (file_exists($File))
    {
    	try {
    		$Excel = New COM("Excel.Application");
     
    		echo "<p>Version Excel : ".$Excel->Application->Version."</p>";
    		echo "<p>Application name : ".$Excel->Application->Name."</p>";
    		echo "<p>Permission : ".shell_exec("whoami")."</p>";
    		echo "<p>Chemin vers Application : ".$Excel->Application->Path."</p>";
     
    		$Excel->Application->Visible=false;
    		$Excel->Application->DisplayAlerts=true;
     
    		$Book  = $Excel->Application->Workbooks->Open($File) or Die ("Impossible ouvrir classeur !");
     
    		$Sheet = $Book->Worksheets(1);
    		$Sheet->Activate();
    		$Sheet->Name = "Test";
     
    		$Cell = $Sheet->Range("C6");
    		$Cell->Activate();
    		$Cell->Value = "Essai";
     
    		$Excel->Application->ActiveWorkbook->SaveAs($Save);   
     
    		unset($Cell);
    		unset($Sheet);
     
    		$Book->Close();
    		unset($Book);
     
    		echo "<p class='Finish'>Application Terminée !</p>";
    	}
    	catch (Exception $e)
    	{
    		echo "<pre>Exception sur Excel.Application : ".$e->getMessage()."</pre>";
    	}
     
    	$Excel->Quit();
    	unset($Excel);
    }
    else
    {
    	echo "<p>Fichier Inexistant : ".$File."</p>";
    }
    ?>
    </body>
    </html>
    La cellule est la "C6" et le libelle est "essai".
    Je te laisse chercher sur la façon d'introduire le résultat de ta requête dans ta feuille Excel à partir de cet exemple.

    @+

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Décembre 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur de déploiement réseaux

    Informations forums :
    Inscription : Décembre 2015
    Messages : 10
    Points : 30
    Points
    30
    Par défaut
    merci beaucoup mon frere
    SVP, je veux compte juste quand job=3 après job=1 comme l’exemple

    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
    --------------
    select * from test
     
     
    +----+-----+--------+
    | id | job | lib    |
    +----+-----+--------+
    |  1 |   1 | rouge  |
    |  2 |   1 | vert   |
    |  3 |   1 | rouge  |
    |  4 |   1 | vert   |
    |  5 |   2 | bleu   |
    |  6 |   2 | noir   |
    |  7 |   2 | rose   |
    |  8 |   3 | violet |
    |  9 |   3 | marron |
    +----+-----+--------+
     
    je veux cette resultat
     
    +-----+----------+
    | job | count(*) |
    +-----+----------+
    |   3 |        2 |
    |   1 |        4 |
    +-----+----------+
    ça marche pas avec moi quand j'ai ajoute where


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT  job
        ,   COUNT(*) AS nb
    FROM    table1
    where job=3, job=1
    GROUP BY job
    ORDER BY job
    ;

  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 644
    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 644
    Points : 19 907
    Points
    19 907
    Par défaut
    Salut Winforce.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    select job, count(*)
    from test
    where job in (1,3)
    group by job
    order by job desc
    --------------
     
    +-----+----------+
    | job | count(*) |
    +-----+----------+
    |   3 |        2 |
    |   1 |        4 |
    +-----+----------+
    @+

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Décembre 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur de déploiement réseaux

    Informations forums :
    Inscription : Décembre 2015
    Messages : 10
    Points : 30
    Points
    30
    Par défaut
    bonjour mon frere, merci beaucoup ça marche bien avec moi, mais j'ai une cas exceptionel

    exemple

    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
    select job from id_job
    +-------+-----+
    | id_job | job |
    +-------+-----+
    |  1      |   1 |
    |  2      |   2 |
    |  3      |   3 |
    |  4      |   4 |
    +-------+-----+
    
    select * from test
    +----+-----+--------+
    | id | job | lib    |
    +----+-----+--------+
    |  1 |   1 | rouge  |
    |  2 |   1 | vert   |
    |  3 |   1 | rouge  |
    |  4 |   1 | vert   |
    |  5 |   2 | bleu   |
    |  6 |   2 | noir   |
    |  7 |   2 | rose   |
    |  8 |   3 | violet |
    |  9 |   3 | marron |
    +----+-----+--------+
    Normalement le résultat s'affiche comme dans l'illustration

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    +-----+----------+
    | job | count(*) |
    +-----+----------+
    |   3 |        2 |
    |   1 |        4 |
    |   4 |        0 |
    +-----+----------+
    bonne journée

  7. #7
    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 644
    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 644
    Points : 19 907
    Points
    19 907
    Par défaut
    Salut winforce.

    Pour mieux comprendre ton problème, il m'aurait fallu la requête qui produit cette anomalie.

    D'après ce que j'ai compris, tu as fait une jointure avec une table job.
    Dans celle-ci, tu as une ligne (job = 4) ayant aucun fils dans la table 'test'.
    Et tu te demandes pourquoi elle te sort comme résultat zéro. Est-ce bien cela ?

    Tu devrais expliquer en français, le résultat que tu cherches à produire.

    Je te donne un nouveau jeu d'essai avec l'ajout de la table job.
    Comme je ne sais pas si tu veux obtenir cette ligne à zéro ou pas, je vais te faire deux requêtes.
    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
    --------------
    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 `job`
    --------------
     
    --------------
    create table `job` (
      `id`   smallint unsigned  NOT NULL AUTO_INCREMENT PRIMARY KEY,
      `lib`  char(10)           NOT NULL
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    insert into `job` (`lib`) values ('job_1'),('job_2'),('job_3'),('job_4')
    --------------
     
    --------------
    select * from job
    --------------
     
    +----+-------+
    | id | lib   |
    +----+-------+
    |  1 | job_1 |
    |  2 | job_2 |
    |  3 | job_3 |
    |  4 | job_4 |
    +----+-------+
    --------------
    commit
    --------------
     
    --------------
    DROP TABLE IF EXISTS `test`
    --------------
     
    --------------
    create table `test` (
      `id`     int unsigned       NOT NULL AUTO_INCREMENT PRIMARY KEY,
      `job_id` smallint unsigned  NOT NULL,
      `val`    char(10)           NOT NULL,
      CONSTRAINT `FK_01` FOREIGN KEY (`job_id`) REFERENCES `job` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    insert into `test` (`job_id`,`val`) values
      (1, 'rouge'),(1, 'vert'),(1, 'rouge'),(1, 'vert'),
      (2, 'bleu'),(2, 'noir'),(2, 'rose'),
      (3, 'violet'),(3, 'marron')
    --------------
     
    --------------
    select * from test
    --------------
     
    +----+--------+--------+
    | id | job_id | val    |
    +----+--------+--------+
    |  1 |      1 | rouge  |
    |  2 |      1 | vert   |
    |  3 |      1 | rouge  |
    |  4 |      1 | vert   |
    |  5 |      2 | bleu   |
    |  6 |      2 | noir   |
    |  7 |      2 | rose   |
    |  8 |      3 | violet |
    |  9 |      3 | marron |
    +----+--------+--------+
    --------------
    select t1.lib, count(t2.job_id)
    from            job  as t1
    inner join      test as t2
    on  (t2.job_id = t1.id)
    and (t1.id in (1,3,4))
    group by t1.lib
    order by t1.lib desc
    --------------
     
    +-------+------------------+
    | lib   | count(t2.job_id) |
    +-------+------------------+
    | job_3 |                2 |
    | job_1 |                4 |
    +-------+------------------+
    --------------
    select t1.lib, count(t2.job_id)
    from            job  as t1
    left outer join test as t2
    on   (t2.job_id = t1.id)
    and  (t1.id in (1,3,4))
    where t1.id in (1,3,4)
    group by t1.lib
    order by t1.lib desc
    --------------
     
    +-------+------------------+
    | lib   | count(t2.job_id) |
    +-------+------------------+
    | job_4 |                0 |
    | job_3 |                2 |
    | job_1 |                4 |
    +-------+------------------+
    --------------
    COMMIT
    --------------
     
    --------------
    SET AUTOCOMMIT = 1
    --------------
     
     
    Appuyez sur une touche pour continuer...
    La première requête se fait avec l'intersection (inner join) entre les deux tables. Elle retourne que les lignes qui sont communes aux deux tables.

    La seconde requête retourne toutes les lignes (présentes et absentes) de la table "test", par rapport à la sélection des lignes de la table "job".
    Pour optimiser l'extraction, il est nécessaire de faire un "on (t1.id in (1,3,4))".
    Ainsi tu ne récupères que les lignes sélectionnées.

    En faisant un "left outer join", il va te retourner toutes les lignes de la table "job", même celle que tu ne veux pas.
    Donc il est nécessaire de mettre un "where t1.id in (1,3,4)", uniquement pour l'affichage des résultats.

    @+

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

    Vous avez ouvert 2 fois le même sujet, clôturez l'un des 2 pour ne pas encombrer inutilement le forum, et ainsi toutes les réponses seront centralisées
    Le frêre jumeau est ici :
    http://www.developpez.net/forums/d15...e/#post8482836

  9. #9
    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 644
    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 644
    Points : 19 907
    Points
    19 907
    Par défaut
    Salut Escartefigue.

    Comment se fait-il que je n'ai pas vu ce sujet en doublon ?

    Je reçois pourtant chaque soir, le rapport périodique sur mysql !

    @+

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Décembre 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur de déploiement réseaux

    Informations forums :
    Inscription : Décembre 2015
    Messages : 10
    Points : 30
    Points
    30
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    Bonjour,

    Vous avez ouvert 2 fois le même sujet, clôturez l'un des 2 pour ne pas encombrer inutilement le forum, et ainsi toutes les réponses seront centralisées
    Le frêre jumeau est ici :
    http://www.developpez.net/forums/d15...e/#post8482836
    slt comment je peux supprime l'autre discussion
    merci d'avance

  11. #11
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 423
    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 423
    Points : 40 078
    Points
    40 078
    Billets dans le blog
    9
    Par défaut
    vous cloturez ce sujet en le marquant comme résolu, et vous conservez l'autre dans lequel vous avez plus de réponses

Discussions similaires

  1. Résultat de plusieurs requêtes (count) sur la même colonne
    Par winforce dans le forum Langage SQL
    Réponses: 12
    Dernier message: 30/12/2015, 15h36
  2. [PDO] Plusieurs requêtes PDO sur une même page PHP
    Par Soso_ dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 30/04/2014, 14h45
  3. Réponses: 3
    Dernier message: 26/07/2011, 14h58
  4. Réponses: 2
    Dernier message: 05/04/2008, 18h33
  5. 2 requêtes count() sur la même ligne
    Par nanard110 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 06/08/2007, 16h18

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