Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/01/2011, 17h14   #1
Invité de passage
 
Inscription : octobre 2002
Messages : 14
Détails du profil
Informations forums :
Inscription : octobre 2002
Messages : 14
Points : 2
Points : 2
Par défaut Regroupement par type de client et nombre de commandes

Bonjour,

j'ai une requête que je n'arrive pas à écrire :-(

J'ai 2 tables Client et Commande, un clé unique client dans la table Client, et une clé avec doublon client dans Commande
Chaque client a un Type

Je voudrais pour chaque statut avoir la liste des nombres de commandes différents triés par Type et nombre de commandes

Ex :
Gold 10 cmdes
Gold 12 cmdes
Gold 15 cmdes
Silver 1 cmdes
Silver 5 cmdes
Silver 6 cmdes
Silver 8 cmdes
...............

Si ça vous tente, merci d'avance.
pruvel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2011, 17h32   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 990
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 10 990
Points : 18 241
Points : 18 241
Envoyer un message via MSN à CinePhil
Composition des tables et requête que tu as essayée, conformément aux règles de ce forum, STP !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2011, 17h50   #3
Invité de passage
 
Inscription : octobre 2002
Messages : 14
Détails du profil
Informations forums :
Inscription : octobre 2002
Messages : 14
Points : 2
Points : 2
t_clients (code, cli_type, cli_nom)
t_cmdes (id, code, montant)

Code :
1
2
3
4
5
SELECT cli_type, count(*) AS total
FROM t_cmdes
INNER JOIN t_clients ON 
t_cmdes.code = t_clients.code
GROUP BY cli_type
le problème c'est que ça me ramène la somme pour chaque type et non les différents nombres de commandes pour chaque type

Je suis pas très doué mais en général je m'en sors mais là j'ai vraiment pas d'idée :-(
pruvel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2011, 18h05   #4
Membre émérite
 
Inscription : août 2008
Messages : 835
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 835
Points : 823
Points : 823
La liste des nombres de commande... selon quoi? Par client? Si c'est le cas ajoutez le code client dans le regroupement.
Snipah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2011, 18h07   #5
Membre Expert
 
Homme
Responsable de service informatique
Inscription : janvier 2009
Messages : 1 081
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 38
Localisation : France

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : Boutique - Magasin

Informations forums :
Inscription : janvier 2009
Messages : 1 081
Points : 1 875
Points : 1 875
Bonjour,
Dans quelle colonne se trouve le statut de la commande ?

Tatayo.
tatayo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2011, 18h23   #6
Invité de passage
 
Inscription : octobre 2002
Messages : 14
Détails du profil
Informations forums :
Inscription : octobre 2002
Messages : 14
Points : 2
Points : 2
en fait je veux le total par type de client (cli_type)

ex :
Les clients
code cli_type
1 Gold
2 Gold
3 Silver
4 Silver
5 Silver

Les commandes
code (client) le reste on s'en fiche
1
1
2
3
3
4
3
5

ma requête doit me donner
Gold 1 (1 commande pour le client 2)
Gold 2 (2 commandes pour le client 1)
Silver 1 (1 commandes pour els clients 4 et 5)
Silver 3 (3 commandes pour le client 3)
pruvel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2011, 18h36   #7
Membre Expert
 
Homme
Responsable de service informatique
Inscription : janvier 2009
Messages : 1 081
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 38
Localisation : France

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : Boutique - Magasin

Informations forums :
Inscription : janvier 2009
Messages : 1 081
Points : 1 875
Points : 1 875
Pff, c'est pas très clair:
Citation:
Envoyé par pruvel Voir le message
Je voudrais pour chaque statut avoir la liste des nombres de commandes différents triés par Type et nombre de commandes
Citation:
Envoyé par pruvel Voir le message
en fait je veux le total par type de client (cli_type)

ex :
Les clients
code cli_type
1 Gold
2 Gold
3 Silver
4 Silver
5 Silver

Les commandes
code (client) le reste on s'en fiche
1
1
2
3
3
4
3
5

ma requête doit me donner
Gold 1 (1 commande pour le client 2)
Gold 2 (2 commandes pour le client 1)
Silver 1 (1 commandes pour els clients 4 et 5)
Silver 3 (3 commandes pour le client 3)
Ce que tu demande n'est pas en accord avec l'exemple que tu donnes.
Si tu veux le nombre de commande par type de client, le résultat sera:
Gold 3 (les clients 1 et 2)
Silver 5 (les clients 3,4 et 5)
Pourquoi les clients 1 et 2 sont séparés ? Pourquoi le client 3 n'est pas compté avec les clients 4 et 5 ? Pourquoi ces deux derniers sont regroupés ?

Tatayo.
tatayo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2011, 18h50   #8
Invité de passage
 
Inscription : octobre 2002
Messages : 14
Détails du profil
Informations forums :
Inscription : octobre 2002
Messages : 14
Points : 2
Points : 2
si mon résultat est bien ce que je veux : pour chaque type de client, tous les nombres de commandes possible et pas la somme des commandes par type de client (ça j'y arrive)

Dans mon exemple 4 et 5 sont regroupés car ils sont de même type et ont eu tous les une seule commande

pour essayer de clarifier ma demande :

avoir pour tous les clients, leur nombre de commande
distinguer ces différents nombres de commande par type de client

est ce que c'est plus clair ?
pruvel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2011, 18h59   #9
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 990
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 10 990
Points : 18 241
Points : 18 241
Envoyer un message via MSN à CinePhil
C'est toujours pas clair !
Lis la phrase en bleu de ma signature, respire un grand coup et reformule clairement ta demande !

Citation:
avoir pour tous les clients, leur nombre de commande
Pour chaque client ou pour l'ensemble des clients ?

Citation:
distinguer ces différents nombres de commande par type de client
D'après la structure de tes tables, un client n'a qu'un seul type.

Donc on ne comprend toujours pas ta demande !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2011, 19h15   #10
Invité de passage
 
Inscription : octobre 2002
Messages : 14
Détails du profil
Informations forums :
Inscription : octobre 2002
Messages : 14
Points : 2
Points : 2
ok :-) j'espère que je serais plus clair, mais je tourne tellement avec ce problème ....

un client a un type (Gold, Silver, ...)
un client a 0-n commandes dans la table t_cmdes (liaison sur le champs code dans les 2 tables)

si je fais
Code :
1
2
3
SELECT code, count(*) AS total
FROM t_cmdes
GROUP BY code
j'ai le nombre de commandes par client

sur cette liste, je voudrais ensuite faire un regroupement par type de client pour avoir au final pour chaque type de client les différents nombre de commandes des clients ayant ce type

Dans mon exemple, cela donnerait :
1 Gold
2 Gold
3 Silver
4 Silver
5 Silver
Les commandes
code (client) le reste on s'en fiche
1
1
2
3
3
4
3
5

Le regroupement par client
1 2 cmdes
2 1 cmde
3 3 cmdes
4 1 cmde
5 1 cmde

Ensuite par type

Gold 1 (1 commande pour le client 2 de type Gold)
Gold 2 (2 commandes pour le client 1 de type Gold)
Silver 1 (1 commandes pour les clients 4 et 5 de type Silver) => je ne veux qu'une seule ligne car les clients 4 et 5 sont de même type et ont le même nombre de commande
Silver 3 (3 commandes pour le client 3 de type Silver)
pruvel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2011, 19h16   #11
Invité de passage
 
Inscription : octobre 2002
Messages : 14
Détails du profil
Informations forums :
Inscription : octobre 2002
Messages : 14
Points : 2
Points : 2
peut être pour simplifier :-)

si j'avais la table suivante
code, type, nombre de commandes

ça reviendrait à faire

Code :
1
2
3
SELECT type, nombre de commandes
FROM TABLE
GROUP BY type, nombre de commandes
pruvel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2011, 19h25   #12
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 990
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 10 990
Points : 18 241
Points : 18 241
Envoyer un message via MSN à CinePhil
Dans ta dernière requête, le GROUP BY ne sert à rien puisque tu groupes sur toutes les colonnes du SELECT !

En plus contrairement à ce que je comprends maintenant de ta demande, tu n'as plus les clients !

Citation:
sur cette liste, je voudrais ensuite faire un regroupement par type de client pour avoir au final pour chaque type de client les différents nombre de commandes des clients ayant ce type
Je crois que ce que tu cherches à faire est de la cosmétique et ce n'est pas le boulot du SGBD mais du logiciel qui présente les données à l'utilisateur.

Ce que tu peux avoir facilement en SQL, c'est un regroupement par type et par client, donc plusieurs lignes pour un type :
Code :
1
2
3
4
SELECT type, code, COUNT(*) AS nombre
FROM t_cmde
GROUP BY type, code
ORDER BY type, code
Ou alors je n'ai toujours pas compris !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2011, 19h54   #13
Invité de passage
 
Inscription : octobre 2002
Messages : 14
Détails du profil
Informations forums :
Inscription : octobre 2002
Messages : 14
Points : 2
Points : 2
Je suis vraiment désolé de ne pas arrivé à être clair

j'avais oublié le distinct dans la requête

type n'est pas dans le fichiers des commandes mais dans le fichier des clients

à partir de mes 2 tables, il faudrait que j'arrive à une où j'aurais pour chaque client son nombre de commandes
Ensuite je fais un regroupement pour avoir toutes les combinaisons type de client + nbre de commandes
Le client en lui même ne m'intéresse pas, c'est uniquement son type qui est important.
pruvel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2011, 20h08   #14
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 990
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 10 990
Points : 18 241
Points : 18 241
Envoyer un message via MSN à CinePhil
Donc en clair tu veux le nombre de commandes par type ?
Code :
1
2
3
4
SELECT cl.cli_type, COUNT(*) AS nombre
FROM t_clients cl
INNER JOIN t_cmdes cm ON cm.code = cl.code
GROUP BY cl.cli_type
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2011, 20h28   #15
Invité de passage
 
Inscription : octobre 2002
Messages : 14
Détails du profil
Informations forums :
Inscription : octobre 2002
Messages : 14
Points : 2
Points : 2
héhé pas exactement

le client A de type Gold a eu 3 cmdes
le client B de type Gold a eu 3 cmdes
le client C de type Silver a eu 2 cmdes
le client D de type Silver a eu 3 cmdes

je veux
Gold 3 cmdes
Silver 2 cmdes
Silver 3 cmdes

je veux toutes les combinaisons type de client / nbre de cmdes
pruvel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2011, 20h44   #16
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 990
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 10 990
Points : 18 241
Points : 18 241
Envoyer un message via MSN à CinePhil
Code :
1
2
3
4
5
6
7
8
9
SELECT cl.cli_type, tmp.nombre
FROM t_clients cl
INNER JOIN 
(
  SELECT code, COUNT(*) AS nombre
  FROM t_cmdes
  GROUP BY code
) tmp ON tmp.code = cl.code
ORDER BY cl.cli_type
C'est tellement bizarre comme demande, pas étonnant qu'on n'y comprenne rien !

Quelle logique conduit à ce besoin ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2011, 22h16   #17
Invité de passage
 
Inscription : octobre 2002
Messages : 14
Détails du profil
Informations forums :
Inscription : octobre 2002
Messages : 14
Points : 2
Points : 2
une demande de ma maitrise d'ouvrage, moi je cherche pas à comprendre j'essaye de faire :-)

ta requête me fait avancer un peu, le hic c'est qu'elle me ramène plusieurs fois la même combinaison type / nbre de commandes et tous les nbres de commande sont à 1 :-(
pruvel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2011, 09h41   #18
Invité de passage
 
Inscription : octobre 2002
Messages : 14
Détails du profil
Informations forums :
Inscription : octobre 2002
Messages : 14
Points : 2
Points : 2
J'ai rajouté le distinct, super, ça me donne exactement ce que je voulais.

Merci beaucoup, et désolé d'avoir été si peu clair.
pruvel est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h16.


 
 
 
 
Partenaires

Hébergement Web