Aide pour requête MySQL

WRInaute accro
Bonjour,

Voici mon souci : Pour schématiser, j'ai des enregistrements dans ma BDD un peu comme ça.

id_commande | id_compte
1 | 1
2 | 2
3 | 3
4 | 1
5 | 1
etc...

Je voudrais connaitre le taux de fidélisation, c'est a dire avoir des pourcentages sur le nbre de commandes par clients. Dans mon exemple, le résultat sera :
3 commandes -> 1 compte
1 commande -> 2 compte

Et je bloque sur la requête à écrire. Pouvez-vous m'aider ?
 
WRInaute accro
tu demande souvent de l'aide pour le truc que tu dois réaliser toi :-) toujours ces fichues commandes et clients. tu veux pas etre orienté vers un forum de dév php ?
 
WRInaute accro
Tu rigole ou quoi... J'aide plus que j'en demande. Ca doit être la 1ère fois que je demande de l'aide pour une requête. Regarde tous les messages que j'ai posté et tu va te rendre compte que tu t'es surement trompé de mec...
 
WRInaute accro
je me rappelle tres bien des messages, mais pas de l auteur, je vais les chercher desuite pour voir si c est moi qui me trompe :-)
 
WRInaute occasionnel
je crois que la requete suivante:

Code:
SELECT id_compte , count( * ) AS Number
FROM `ta_table` 
GROUP BY id_compte
ORDER BY Number DESC

devrait te renvoyer une table avec le nombre de commandes par client. Ensuite tu divises par le nbre total de commandes (facile a obtenir) pour avoir ton pourcentage.

Cela t'aide t-il ?
 
WRInaute accro
Bé Sophie, je crois pas que ta requête répond à mon besoin, désolé mais merci de ta participation. Elle va me retourner le nbre pour chaque compte. Alors que moi, je voudrais le nbre de compte ordonné sur le nbre de commande.

en gros le résultat, c'est :
nb_commande | nb_compte

En fait, plus j'y pense, plus je me dit que ça ne peut pas se faire en une seule requête, non ?
 
WRInaute passionné
Un truc dans ce genre :
Code:
-- 
-- Structure de la table `test`
-- 

CREATE TABLE `test` (
  `IDCommande` int(11) NOT NULL default '0',
  `IDCompte` int(11) NOT NULL default '0'
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

-- 
-- Contenu de la table `test`
-- 

INSERT INTO `test` VALUES (1, 1);
INSERT INTO `test` VALUES (2, 1);
INSERT INTO `test` VALUES (3, 1);
INSERT INTO `test` VALUES (4, 2);
INSERT INTO `test` VALUES (5, 3);

et la requete SQL associée :
Code:
SELECT NbCommande, count(*)
FROM (
SELECT count(*) AS NbCommande
FROM test
GROUP BY IDCompte
) as tbl1
GROUP BY NbCommande

ce qui donne :

NbCommande, count(*)
1 2
3 1

1 commandes => 2 clients
3 commandes => 1 clients


après a toi de faire des stats
 
WRInaute passionné
ça marche chez moi. Je viens juste de tester en faisant un copier/coller du code posté
tu peux poster la structure de ta table ainsi qu'un jeu de données de test, ainsi que ton erreur de syntaxe

Ma config :
PhpMyAdmin : 2.6.1-pl3
Mysql : 4.1.10

Tu as bien mysql 4+
 
WRInaute accro
MySQL 4.0.15 pourtant. Je regarde ça de plus près car d'après la doc MySQL, ta requête a l'air tout à fait correcte.
 
WRInaute accro
Erreur

requête SQL :

SELECT NbCommande, count(*) FROM (SELECT count(*) AS NbCommande FROM commande GROUP BY num_client) as tbl GROUP BY NbCommande LIMIT 0, 30

MySQL a répondu:


Erreur de syntaxe près de 'SELECT count(*) AS NbCommande FROM commande GROUP BY num_client)' à la ligne 1
 
WRInaute passionné
Xele a dit:
Les sous-requêtes ne marchent pas pour mysql < 4.1

Je croyais que c'était sous MySQl 3+ que ça marchait pas.
BlMan, Si tu peux demande à ton hébergeur d'upgrader ton MySQl.
Les sous-requêtes ça simplifie la vie
 
Discussions similaires
Haut