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 :

Compter le nombre d'occurrences par entrées


Sujet :

MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club Avatar de Casio
    Homme Profil pro
    Historien numérique
    Inscrit en
    Novembre 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Historien numérique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 312
    Points : 59
    Points
    59
    Par défaut Compter le nombre d'occurrences par entrées
    Salutations,

    j'essaye depuis des heures, mais n'arrive pas à pondre un truc fonctionnel.

    Je cherche à faire un tableau automatique, qui me sort des stats sur une table.

    Les champs recherchés dans la table SQL sont :
    - MailTrans : L'adresse mail de l'utilisateur du ticket
    - DateOk : La date de cloture du ticket

    Je voudrais qu'un tableau se crée tout seul avec le nombre de fois que chaque utilisateur (via son mail) à été enregistré, et en face le nom de clotures de cet utilisateur.
    Il n'y à pas de base de nom d'utilisateurs pré-définie. Le champs mail utilisateurs est libre. Il peut donc y avoir des erreurs de saisies.

    Ex :

    - toto@titi.com renseigné 6 fois | 4 Fois cloturé
    - robert@hue.com renseigné 12 fois | 0 fois cloturé
    - ...

    Pourriez-vous m'aider ?
    Digital self-made Man - OnLine since 1993.
    https://wda-fr.org - https://mathieu.charreyre.net

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 216
    Points : 12 812
    Points
    12 812
    Par défaut
    Bonjour,
    Tu peux faire un count(distinct) sur la colonne DateOk, en regroupant le tout sur MailTrans.

    Tatayo.

  3. #3
    Membre du Club Avatar de Casio
    Homme Profil pro
    Historien numérique
    Inscrit en
    Novembre 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Historien numérique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 312
    Points : 59
    Points
    59
    Par défaut
    Totalement incapable de pondre une telle syntaxe ...
    Digital self-made Man - OnLine since 1993.
    https://wda-fr.org - https://mathieu.charreyre.net

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 084
    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 084
    Points : 30 841
    Points
    30 841
    Par défaut
    COUNT et GROUP BY devraient suffire à répondre à ton besoin.
    Qu'as-tu déjà essayé et quels problèmes rencontres-tu avec ces essais ? Des messages d'erreur ? Un résultat erroné ?
    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.

  5. #5
    Membre du Club Avatar de Casio
    Homme Profil pro
    Historien numérique
    Inscrit en
    Novembre 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Historien numérique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 312
    Points : 59
    Points
    59
    Par défaut
    Très clairement, aucun rendu. Je n'arrive mm pas a sortir une variable.
    Il me faudrait un angle de travail.
    Digital self-made Man - OnLine since 1993.
    https://wda-fr.org - https://mathieu.charreyre.net

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 216
    Points : 12 812
    Points
    12 812
    Par défaut
    Tiens, deux liens qui devraient t'aider à commencer:
    Count()
    Group by()

    Tu peux aussi nous montrer les requêtes que tu as tentées, on pourra t'aider à les corriger.

    Tatayo.

  7. #7
    Membre du Club Avatar de Casio
    Homme Profil pro
    Historien numérique
    Inscrit en
    Novembre 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Historien numérique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 312
    Points : 59
    Points
    59
    Par défaut
    C'est surtout la syntaxe du select que je dois initier.
    Après je suppose qu'avec un for each ça devrait passer.
    Digital self-made Man - OnLine since 1993.
    https://wda-fr.org - https://mathieu.charreyre.net

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 216
    Points : 12 812
    Points
    12 812
    Par défaut
    Justement la syntaxe est donnée dans l'un des deux liens.
    Pour le for each, on sort de la partie SQL, donc il faudra voir dans la bonne section du forum.

    Tatayo.

  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 389
    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 389
    Points : 19 121
    Points
    19 121
    Par défaut
    Salut à tous.

    Quelque chose dans ce genre là :
    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
    --------------
    START TRANSACTION
    --------------
     
    --------------
    set session collation_connection = "latin1_general_ci"
    --------------
     
    --------------
    DROP DATABASE IF EXISTS `base`
    --------------
     
    --------------
    CREATE DATABASE IF NOT EXISTS `base`
            DEFAULT CHARACTER SET `latin1`
            DEFAULT COLLATE       `latin1_general_ci`
    --------------
     
    --------------
    DROP TABLE IF EXISTS `test`
    --------------
     
    --------------
    CREATE TABLE `test`
    (  `id`       integer unsigned  NOT NULL auto_increment Primary key,
       `email`    varchar(255)      NOT NULL,
       `cloture`  date                  NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
    --------------
     
    --------------
    INSERT INTO `test` (`email`,`cloture`) VALUES
      ('jean.du.pont@gmail.com', '2020-02-12'),
      ('jean.du.pont@gmail.com', '2020-05-23'),
      ('jean.du.pont@gmail.com', '2020-07-05'),
      ('jean.du.pont@gmail.com', NULL),
     
      ('albert.dupontel@gmail.com', '2020-03-14'),
      ('albert.dupontel@gmail.com', '2020-07-14'),
      ('albert.dupontel@gmail.com', NULL)
    --------------
     
    --------------
    select * from  `test`
    --------------
     
    +----+---------------------------+------------+
    | id | email                     | cloture    |
    +----+---------------------------+------------+
    |  1 | jean.du.pont@gmail.com    | 2020-02-12 |
    |  2 | jean.du.pont@gmail.com    | 2020-05-23 |
    |  3 | jean.du.pont@gmail.com    | 2020-07-05 |
    |  4 | jean.du.pont@gmail.com    | NULL       |
    |  5 | albert.dupontel@gmail.com | 2020-03-14 |
    |  6 | albert.dupontel@gmail.com | 2020-07-14 |
    |  7 | albert.dupontel@gmail.com | NULL       |
    +----+---------------------------+------------+
    --------------
    select    `email`,
              count(*) as total,
              sum(case when `cloture` is null then 0 else 1 end) as cloture
        from  `test`
    group by `email`
    order by `email`
    --------------
     
    +---------------------------+-------+---------+
    | email                     | total | cloture |
    +---------------------------+-------+---------+
    | albert.dupontel@gmail.com |     3 |       2 |
    | jean.du.pont@gmail.com    |     4 |       3 |
    +---------------------------+-------+---------+
    --------------
    COMMIT
    --------------
     
    Appuyez sur une touche pour continuer...
    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  10. #10
    Membre du Club Avatar de Casio
    Homme Profil pro
    Historien numérique
    Inscrit en
    Novembre 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Historien numérique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 312
    Points : 59
    Points
    59
    Par défaut
    Bon, merci de vos retours.

    J'avance un peu.

    Voici grâce à vous ce que j'ai maintenant qui donne bien un résultat :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	// Requetes SQL
    	$requete = 'SELECT MailTrans, count(MailTrans) as Total, sum(if(DatOk, 1, 0)) as Clos, sum(if(DatOk, 0, 1)) as Ouvert, sum(if(DatSuppr, 1, 0)) as Suppr FROM ' . $table . ' GROUP BY MailTrans ORDER BY MailTrans ASC';
    	$Benevoles = $connexion->query( $requete );

    Mais soyons bien clairs : Je ne sais absolument pas ce que veulent dire ces ", 1, 0" ou ", 0, 1" dans les variables sum.

    Je viens d'ajouter un count pour avoir le nombre total.

    A vous lire ...
    Digital self-made Man - OnLine since 1993.
    https://wda-fr.org - https://mathieu.charreyre.net

  11. #11
    Membre du Club Avatar de Casio
    Homme Profil pro
    Historien numérique
    Inscrit en
    Novembre 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Historien numérique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 312
    Points : 59
    Points
    59
    Par défaut
    Le code ci-dessus est-il bon pour vous ?

    Et sinon, le coups des 1, 0 de SUM, ça marche comment ?
    Digital self-made Man - OnLine since 1993.
    https://wda-fr.org - https://mathieu.charreyre.net

  12. #12
    Membre averti
    Profil pro
    Administrateur
    Inscrit en
    Mai 2008
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 237
    Points : 433
    Points
    433
    Par défaut
    Citation Envoyé par Casio Voir le message
    Bon, merci de vos retours.

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	// Requetes SQL
    	$requete = 'SELECT MailTrans, count(MailTrans) as Total, sum(if(DatOk, 1, 0)) as Clos, sum(if(DatOk, 0, 1)) as Ouvert, sum(if(DatSuppr, 1, 0)) as Suppr FROM ' . $table . ' GROUP BY MailTrans ORDER BY MailTrans ASC';
    	$Benevoles = $connexion->query( $requete );
    Pourquoi mettez-vous le nom de la table dans une variable, avez-vous plusieurs tables avec la même structure ?

    Citation Envoyé par Casio Voir le message
    Mais soyons bien clairs : Je ne sais absolument pas ce que veulent dire ces ", 1, 0" ou ", 0, 1" dans les variables sum.
    Je viens d'ajouter un count pour avoir le nombre total.
    A vous lire ...
    SUM(a) n'est pas une variable mais plutôt une fonction comme l'est if (a, b, c);
    if (a, b, c) : si a est vrai, alors if retourne la valeur b, sinon la valeur c
    SUM(d) : SUM additionnera toutes les valeurs de d, donc toutes valeurs retournées par la fonction if, ici : 0+1+1+0+1+.........

Discussions similaires

  1. [XL-2003] Compter le nombre de jours par mois entre deux dates
    Par Mikayel dans le forum Excel
    Réponses: 8
    Dernier message: 23/09/2016, 13h36
  2. Réponses: 2
    Dernier message: 13/07/2009, 16h54
  3. Compter le nombre de jours écoulés entre deux dates
    Par koKoTis dans le forum VBScript
    Réponses: 8
    Dernier message: 07/08/2006, 19h44
  4. Compter le nombre de page par regroupement
    Par bondyfalat dans le forum Access
    Réponses: 2
    Dernier message: 01/03/2006, 17h08

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