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 :

Compter des itérances


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2008
    Messages : 29
    Par défaut Compter des itérances
    Bonjour,

    J'aurais voulu avoir vos conseils sur la manière d'effectuer une certaine requête.

    Dans ma table, j'ai un champ qui correspond à un code d'article. Plusieurs enregistrements différents peuvent avoir le même code article. J'aimerais savoir combien de fois chaque code article apparait dans la table.

    La méthode à laquelle j'ai pensé :
    - chercher tous les codes article différents (avec un select distinct) et les stocker dans un array (colonne 0)
    - compter le nombre d'apparition de chaque code article et le stocker dans la colonne 1 de l'array

    Le problème est que c'est très long à exécuter. Existe-t-il une méthode plus rapide ?

    Merci d'avance !

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Un peu qu'il y a plus rapide oui !
    Laisse le SGBD faire le calcul, il est optimisé pour ça !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT CodeArticle, COUNT(*) AS Nombre
    FROM TaTable
    GROUP BY CodeArticle
    PS : Itérance ? Euh... Moi pas connaitre ce mot !
    Itération en français à la rigueur mais il n'a pas la signification de ce que tu demandes.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2008
    Messages : 29
    Par défaut
    Super, merci beaucoup !!

    Et après, je veux trouver les 10 qui ont le plus grand "Nombre". Y a moyen de faire ça en SQL aussi ?

    Désolé, mais j'apprends le SQL petit à petit et j'ai pas encore les bons réflexes...

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Oui, en complétant la première requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT CodeArticle, COUNT(*) AS Nombre
    FROM TaTable
    GROUP BY CodeArticle
    ORDER BY COUNT(*) DESC
    LIMIT 10
    LIMIT n'est peut-être pas standard en SQL mais existe en tout cas en MySQL.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2008
    Messages : 29
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Oui, en complétant la première requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT CodeArticle, COUNT(*) AS Nombre
    FROM TaTable
    GROUP BY CodeArticle
    ORDER BY COUNT(*) DESC
    LIMIT 10
    LIMIT n'est peut-être pas standard en SQL mais existe en tout cas en MySQL.
    Ca marche parfaitement

    Sauf pour le limit, effectivement : je travaille sur une base Oracle, et elle a pas l'air d'aimer... TOAD me rejète la requête, de même que MDB2 de PEAR après implantation sur une page PHP...

    Merci énormément !!

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 010
    Billets dans le blog
    6
    Par défaut
    Utilisez les fonctions de fenêtrage RANK ou ROW_NUMBER :
    http://sqlpro.developpez.com/SQL_Server_2K5/N1.php
    paragraphe 1.7.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  7. #7
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Par défaut
    Bonjour,

    Tu peux passer par une table dérivée :
    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 TOP 10 
                 T1.CodeArticle
               , T1.Nombre
    FROM
         (
         SELECT 
                    CodeArticle
                  , COUNT(*) AS Nombre
    FROM 
            TaTable
    GROUP BY 
                CodeArticle
            ) T1
     
    ORDER BY 
                 T1.Nombre DESC


    [edit]: Grilled !
    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



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

Discussions similaires

  1. [langage] Compter des chaines de caractères
    Par julfra dans le forum Langage
    Réponses: 2
    Dernier message: 26/05/2004, 17h42
  2. [langage] compter des caracteres dans une chaine
    Par louisis dans le forum Langage
    Réponses: 3
    Dernier message: 18/05/2004, 22h39
  3. [LG]Compter des Lignes...
    Par Loceka dans le forum Langage
    Réponses: 7
    Dernier message: 04/03/2004, 20h29
  4. [SQL] Compter des champs indépendement l'un de l'autre
    Par rippey dans le forum Requêtes et SQL.
    Réponses: 11
    Dernier message: 29/10/2003, 15h35
  5. trier un tableau et compter des elements du tableau
    Par remi51 dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 17/06/2002, 16h51

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