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 :

Table client, commande nombre de client avec n commandes


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 22
    Points : 17
    Points
    17
    Par défaut Table client, commande nombre de client avec n commandes
    t_client (id_client, nom,...)
    t_commande (id_commande, id_client, montant, ...)

    Bonjour
    je cherche à faire des statistiques sur le nombre de commande que passent les clients de mon application.
    Je cherche à avoir comme résultats


    x clients avec 0 commandes
    y clients avec 1 commandes
    z clients avec 2 commandes
    ...
    w clients avec >10 commandes.
    J'ai pensé à faire parcourir la liste des clients, compter le nombre de commande pour chacun , et alimenter 11 compteurs en fonction du nombre de commandes trouvé, mais cette solution me semble trop bourrin.

    est-ce-qu'il aurait une requête plus élégante ?

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    Bonjour

    ce serait bien d'indiquer le SGBD utilisé,
    et de mettre le modèle de requête qui a été testée

    Piste : Utilisez la fonction COUT en association avec la clause GROUP BY
    Merci d'ajouter un sur les tags qui vous ont aidé

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 22
    Points : 17
    Points
    17
    Par défaut
    la SGBD sera mySQL.

    Pour la requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $sql="select distinct count(*) as nb from client,commande where client.id_client=commande.id_client group by commande.id_client";
    $req=mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
    $row = mysql_fetch_array($req);
    $dataNbRes=   $row['nb']; 
    echo "<br>dataNbRes=$dataNbRes";
    Le probleme est que j'obtiens je pense le nombre de catégorie mais je ne sais pas récupérer le nombre d'élément de chaque catégorie

  4. #4
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    merçi, mais n'indiquez que la requête
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
          SELECT Commande.Id_client, COUNT(*) AS Nb
            FROM Client
              INNER JOIN Commande ON Client.Id_client = Commande.Id_client
          GROUP BY Commande.Id_client
    Merci d'ajouter un sur les tags qui vous ont aidé

  5. #5
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    bonjour,

    Le distinct est de trop (il fausse votre résultat).

    Votre jointure est inutile, vu que vous avez les ID des clients dans votre table commande et, je suppose, que c'est une FK.

    Ensuite apprenez à utilisez les jointure avec des inner join, left outer join, etc votre code n'en sera que plus compréhensible

    donc si vous réécrivez votre requête de base :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select id_client, count(*) as nbCom
    from commande
    group by id_client
    Vous avez votre base.

    Pour votre besoin (c'est pas joli) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    select 
    sum(CASE nbCom WHEN 1 THEN 1 else 0 END) as Com1,
    sum(CASE nbCom WHEN 2 THEN 1 ELSE 0 END) as Com2,
    ....
    sum(CASE nbCom WHEN 9 THEN 1 ELSE 0 END) as Com9,
    sum(CASE WHEN (nbCom > 9) THEN 1 ELSE 0 END) as Sup10Com
    FROM (select count(*) as nbCom
              from commande
              group by id_client) TMP
    group by nbCom
    Devrai convenir


    edit: j'avais oublié le group by dans la 2eme requête, et j'ai changé les alias pour qu'ils ne commencent pas par un chiffre..

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    Bonjour,
    Personnellement j'écrirai la requête ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select nbCom, count(*) as nb_client
    from
    (
    	SELECT id_client, count(*) AS nbCom
    	FROM commande
    	GROUP BY id_client
    ) as T
    group by nbCom
    order by nbCom
    Et comme résultat on a
    NbCom,nb_client
    1 3
    2 5
    3 8
    6 2

    et ainsi de suite, mais il peut y avoir des trous, dans mon exemple, il n'y a aucun client avec 4 commandes, donc 4 commande n'apparait pas dans le résultat.

    Cordialement
    Soazig

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 22
    Points : 17
    Points
    17
    Par défaut
    merci à tous cela fonctionne.

Discussions similaires

  1. Réponses: 2
    Dernier message: 02/09/2014, 21h41
  2. Réponses: 4
    Dernier message: 06/08/2014, 18h25
  3. Regroupement par type de client et nombre de commandes
    Par pruvel dans le forum Langage SQL
    Réponses: 17
    Dernier message: 25/01/2011, 09h41
  4. Nombre de colonnes avec le nom de la table
    Par benji41 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 10/07/2005, 20h17

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