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

Langage SQL Discussion :

Grouper pour plusieurs champs et compter


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 88
    Points : 40
    Points
    40
    Par défaut Grouper pour plusieurs champs et compter
    Bonjour,
    J'espère réussir à être la plus claire possible.
    J'ai un premier champ technicien avec des codes et aussi des 0. Je souhaite compter le nombre de lignes que j'ai pour chaque technicien à partir de mon champ ref.
    J'ai un deuxième champ ordon avec que des codes. Je souhaite compter le nombre de lignes que j'ai pour chaque ordon à partir aussi de mon champ ref.
    Ces deux champs représentent donc des codes renvoyant à des personnes. Même si j'ai des 0 dans mon champ technicien, j'aurai automatiquement un code dans mon champ ordo. Avec ou sans 0, je dois compter le nombre de lignes que j'ai dans mes deux champs, pour chaque personne.
    J'ai un troisième champ niv que je voulais compter également (Remarque à la fin)
    J'ai donc voulu faire un group by avec mon champ technicien, et ensuite mon champ ordon, mais j'obtiens des résultats bidons complet.
    Voici la requête que j'avais effectuée :
    Ici, j'ai donc affiché comme j'aurais aimé avoir cad mon champ technicien, mon comptage de ref pour mon champ technicien, mon comptage de niv ayant G pour technicien, mon champ ordon, mon comptage de ref pour mon champ ordon, mon comptage de niv ayant G pour ordon.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select technicien, count(ref),count(niv), ordon, count(ref),count(niv)
    from table
    where date between '20200901' and '20201001' and niv = 'G' and rownum < 50000
    group by technicien, ordon ;
    Remarque : quand je compte niv, si je le mets dans where, il va croire que je ne veux sélectionner les ref qu'ayant niv='G', je veux juste les compter, sans que cela me changer le nombre de ref pour mes autres champs.
    si vous pouviez m'aider, merci à vous

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Essayez de mettre quelques données représentatives - une dizaine de lignes avec seulement les colonnes nécessaires - pour illustrer votre requête.
    Et essayez ceci, sans garantie :
    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
      select 'technicien' as src
           , technicien
           , count(ref)
           , count(case niv when 'G' then 1 end) as cnt_niv_G
        from MaTable
       where to_date(MaDate, 'yyyymmdd') >= date '2020-09-01'
         and to_date(MaDate, 'yyyymmdd') <  date '2020-10-01'
    group by technicien
       union all
      select 'ordon' as src
           , ordon
           , count(ref)
           , count(case niv when 'G' then 1 end)
        from MaTable
       where to_date(MaDate, 'yyyymmdd') >= date '2020-09-01'
         and to_date(MaDate, 'yyyymmdd') <  date '2020-10-01'
    group by ordon;
    Et précisez votre SGBD, j'ai supposé Oracle Database à cause du rownum.

  3. #3
    Membre chevronné
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 138
    Points : 1 918
    Points
    1 918
    Par défaut
    Bonjour,

    En fait ce n'est pas clair. Pourrais-tu montrer quelques lignes représentatives en entrée et ce que tu souhaites en sortie?
    De plus, n'utilises pas de chaines de caractères pour comparer des dates.
    Merci

  4. #4
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 88
    Points : 40
    Points
    40
    Par défaut
    Bonjour,
    merci pour vos réponses, alors votre requête fonctionne mais ce n'est pas le résultat que je recherche.
    Je vais expliquer avec un extrait de lignes ci-joint :
    donc ce que je voulais en premier c'est tous mes codes techniciens et compter pour chacun le nombre de ref + les niv G et pour les codes ordon compter pour chacun le nombre de ref+les niv G.

    Dans mon exemple :
    on va regrouper le code 3015 du technicien, on va compter le nombre de ref (on s'aperçoit bien sûr que par rapport à l'ordon on a différents codes pour un même technicien, c'est normal, car en fait le technicien fait un premier travail, et ordon va faire le second travail, pour une même ref), ici j'ai donc pour 3015 7 lignes pour ma ref et 1 ligne pour niv G.
    maintenant si je regroupe le code 3015 ordon, j'ai 2 lignes pour ref, et 0 pour niv G.
    dans ces deux champs, j'ai un même code, mais il ne s'agit pas de la même activité, le technicien commence le début d'un travail, ordon fera la suite.
    pour technicien je peux avoir 0, ce qui veut dire que la tâche a été automatisée mais j'aurai toujours un code ordon, car la suite ne peut pas être automatisée. donc tous mes 0 seront regroupés pour code technicien, mais mes codes ordon seront dans tous les cas comptés pareil.
    Toujours dans mon exemple comme code technicien 0, je vais avoir 2 lignes références, et 0 ligne pour niv G. En revanche j'aurai pour ordon 571, 1 ligne référence, et 0 ligne pour niv G (comme j'aimerais un regroupement des codes ordon, il est fort probable que cette personne ait travaillée après un code 0 technicien, et des codes techniciens de personne physique).

    Concernant la date, elle est comme ceci dans la table et ce n'est pas la mienne, je ne peux pas la modifier.
    merci à vous tous
    Nom : exemple_lignes.png
Affichages : 95
Taille : 23,2 Ko

  5. #5
    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,

    Désolé mais je n'y comprends rien

    Citation Envoyé par Statistiques33 Voir le message
    ici j'ai donc pour 3015 7 lignes pour ma ref et 1 ligne pour niv G.
    je vois 6 lignes ref pour le technicien 3015...



    Citation Envoyé par Statistiques33 Voir le message
    maintenant si je regroupe le code 3015 ordon, j'ai 2 lignes pour ref, et 0 pour niv G.
    que signifie "je regroupe le code 3015 ordon" ?
    Si on groupe sur le code technicien seul, alors il n'y aura bien sûr qu'une seule ligne pour la valeur "3015"
    Si on groupe sur le code technicien+le code ordon, alors il y a 3 lignes puisque 3 valeurs distinctes de ordon (2845, 3389 et 99999)



    Citation Envoyé par Statistiques33 Voir le message
    Toujours dans mon exemple comme code technicien 0, je vais avoir 2 lignes références, et 0 ligne pour niv G.
    Ben non : on voit bien deux lignes références (les deux dernières), mais toutes deux avec niv="G"


    Bref c'est hyper confus !

  6. #6
    Membre chevronné
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 138
    Points : 1 918
    Points
    1 918
    Par défaut
    Bonjour,

    Merci pour le jeu de données exemple, mais qu'est-ce qui ne va pas avec la requête proposée par Waldar, elle semble répondre à ce que tu souhaites?
    Sinon, par rapport à ton jeu de données exemple, quel est le résultat que tu attends ? (Tu peux donner le même genre de fichier Excel pour le résultat)
    Merci

  7. #7
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 88
    Points : 40
    Points
    40
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    Bonjour,

    Désolé mais je n'y comprends rien


    je vois 6 lignes ref pour le technicien 3015...
    effectivement j'avais compté le filtre, c'est 6 lignes

    Citation Envoyé par escartefigue Voir le message
    que signifie "je regroupe le code 3015 ordon" ?
    Si on groupe sur le code technicien seul, alors il n'y aura bien sûr qu'une seule ligne pour la valeur "3015"
    Si on groupe sur le code technicien+le code ordon, alors il y a 3 lignes puisque 3 valeurs distinctes de ordon (2845, 3389 et 99999)
    j'ai plusieurs lignes avec ce même code ordon, puisque j'ai dit que j'avais plusieurs lignes ref avec le même code ordon (ou même code technicien).
    mon but est de compter le nombre de ref, et de compter le nombre de niv avec G.
    non, j'ai dit que ce sont deux activités distinctes


    Citation Envoyé par escartefigue Voir le message
    Ben non : on voit bien deux lignes références (les deux dernières), mais toutes deux avec niv="G"


    Bref c'est hyper confus !
    oui je compte pour technicien =0 , 2 lignes pour ref, et 2 lignes pour niv=G.
    ok, je fais ce que je peux pour expliquer.

  8. #8
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 88
    Points : 40
    Points
    40
    Par défaut
    Citation Envoyé par vanagreg Voir le message
    Bonjour,

    Merci pour le jeu de données exemple, mais qu'est-ce qui ne va pas avec la requête proposée par Waldar, elle semble répondre à ce que tu souhaites?
    Sinon, par rapport à ton jeu de données exemple, quel est le résultat que tu attends ? (Tu peux donner le même genre de fichier Excel pour le résultat)
    Merci
    Bonjour,
    alors c'est bon en fait, c'est parce que cela me prenait des résultats aléatoires à cause du 50000 lignes, du coup maintenant j'aimerais savoir comment faire pour avoir les résultats pour chaque jour dans ce même mois sélectionné
    merci

  9. #9
    Membre chevronné
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 138
    Points : 1 918
    Points
    1 918
    Par défaut
    Tu ajoutes ta colonne date dans ton SELECT et dans ton GROUP BY.

Discussions similaires

  1. une zone de liste pour plusieurs champs
    Par mumu64 dans le forum IHM
    Réponses: 5
    Dernier message: 26/11/2008, 12h02
  2. [POO] Adapter un script d'autocompletion pour plusieurs champs texte
    Par tusssss dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 14/04/2008, 17h18
  3. [MySQL] un lien pour plusieurs champ du meme nom
    Par gastoncs dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 28/11/2007, 10h31
  4. utilisation d'un domaine pour plusieurs champs
    Par jupierre dans le forum Firebird
    Réponses: 11
    Dernier message: 23/08/2006, 19h45
  5. [FLASH MX] Une scrollbar pour plusieurs champs texte
    Par ffmlgraphics dans le forum Flash
    Réponses: 1
    Dernier message: 08/08/2005, 16h45

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